김기헌
어노테이션(Annotation)
자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이으로 보통 @기호를 앞에 붙여서 사용한다.
어노테이션의 종류
•
표준(내장) 어노테이션 : 자바가 기본적으로 제공해주는 어노테이션
◦
@Override: 오버라이딩을 올바르게 했는지 컴파일러가 체크
◦
@Deprecated: 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다
◦
@SuppressWarnings: 컴파일러의 경고 메세지가 나타나지 않게 한다
•
메타 어노테이션 : 어노테이션을 위한 어노테이션
◦
@Target: 어노테이션을 정의할 때, 적용 대상을 지정하는데 사용
@Target({TYPE, FIELD, TYPE_USE})
@Retention(RetentionPolicy.SOURCE)
public @interface MyAnnotation{}
@MyAnnotation // 적용 대상이 Type(클래스, 인터페이스)
class MyClass{
@MyAnnotation //적용 대상이 FIELD인 경우
int i;
@MyAnnotation //적용 대상이 TYPE_USE인 경우
MyClass mc;
}
Java
복사
◦
@Retention: 어노테이션이 유지되는 기간을 지정하는데 사용
▪
SOURCE: 소스 파일에만 존재
▪
RUNTIME: 클래스 파일에 존재, 실행시 사용 가능
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
Java
복사
•
사용자정의 어노테이션 : 사용자가 직접 정의하는 어노테이션
//어노테이션 생성
@interface 이름{
타입 요소 이름(); // 어노테이션의 요소를 선언
...
}
Java
복사
테스트 주도 개발 - TDD(Test Driven Development)
•
Java에서 쿼리문 작성
김상호
버블 정렬
옆자리에 있는 데이터와 비교하여 더 큰 값을 뒤로 보내는 정렬
•
버블정렬은 정렬되는 모습이 거품이 올라가는 것처럼 보인다고해서 버블 정렬이라고 부른다.
버블 정렬의 시간 복잡도는 O(n²) 이다.
n-1, n-2, n-3, ... , 1 번을 반복하게 되는데 이것을 식으로 하면 n(n-1)/2 이기 때문이다!
이 알고리즘을 보기 쉽게 그림으로 그려보았다.
자바 버블정렬 코드 예제
package algorithm.bubblesort;
import java.util.Arrays;
public class BubbleSort {
public int[] sort(int[] arr, int i) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
return arr;
}
public static void main(String[] args) {
int[] arr = new int[]{7, 2, 3, 9, 28, 11};
BubbleSort bs = new BubbleSort();
int[] result = bs.sort(arr, 0);
result = bs.sort(new int[]{2, 7, 3, 9, 28, 11}, 1);
System.out.println(Arrays.toString(result));
result = bs.sort(new int[]{2, 3, 7, 9, 28, 11}, 2);
System.out.println(Arrays.toString(result));
result = bs.sort(new int[]{2, 3, 7, 9, 28, 11}, 3);
System.out.println(Arrays.toString(result));
result = bs.sort(new int[]{2, 3, 7, 9, 28, 11}, 4);
System.out.println(Arrays.toString(result));
}
}
Plain Text
복사
출력 결과
[2, 3, 7, 9, 28, 11]
[2, 3, 7, 9, 28, 11]
[2, 3, 7, 9, 28, 11]
[2, 3, 7, 9, 11, 28]
Plain Text
복사
이가현
알고리즘
버블정렬
1.
swap 자리바꾸기
2.
중첩 for문
3.
중첩 for문 control
강사님 방식(버블+선택정렬)
교과서 버블정렬
Gradle(maven)빌드
Gradle(maven) 빌드 한 이유
test case를 작성, 실행이 편리함
Unit Test(유닛 테스트) Integration Test(통합 테스트
배포 전)
테스트 코드가 1개밖에 없으면 Unit test, Integration Test가 같다
Test Class만들기
어노테이션(애노테이션)
@이 붙은 코드
1.
특정 메소드에 기능 부여
@Test
@DisplayName(”test 성공시 메세지”)
2.
gradle test에서 지금까지 만들었던 모든 테스트 코드를 실행
3.
.jar파일 생성
gradle 프로젝트 시작 시 test 파일 없을때
TDD란?
•
설계 이후 코드 개발 및 테스트케이스를 작성하는 기존의 개발 프로세스와 다르게 테스트케이스를 작성 한 후 실제 코드를 개발하여 리펙토링하는 절차
1.
요구사항 분석을 한 후
2.
요구사항에 맞게 Test 만들기
3.
Test에 통과하는 실제 코드를 구현
TDD 개발 방식의 장점
•
튼튼한 객체 지향적인 코드 생산
•
재설계 시간의 단축
•
디버깅 시간의 단축
•
테스트 문서의 대체 가능
•
추가 구현의 용이함
TDD 개발 방식의 단점
•
초기 생산성의 저하
csv파일 intellij에서 인코딩 오류시
gradle 파일 목록 정리
자바에서 CSV파일 편집
서울시 병의원 정보가 들어있는 .csv파일을 읽어서
seoul_hospital_insert.sql 을 작성하는 코드를 만들어 보세요.
1.
파일 만들기
2.
.csv에서 line별로 읽어오기
3.
JavaObject Hospital()
4.
id(Pk)
address
district
category
emergency_room
name
subdivision
1.
line별로 읽어와서 필요한 정보만 뽑아서 Object에 담기
public class FileController<T> {
Parser<T> parser;
boolean isRemoveColumName=true;
public FileController(Parser<T> parser) {
this.parser = parser;
}
List<T> readLines(String filename) throws IOException {
List<T> result = new ArrayList<>();
BufferedReader br = new BufferedReader(new FileReader(filename));
String str;
if (isRemoveColumName) {
br.readLine();
}
while ((str = br.readLine()) != null) {
result.add(parser.parse(str));
}
return result;
}
Java
복사
2.
생성자에서 setDistrict()호출 - address.split(“ “) → [0] + “ “ + [1] 서울특별시 금천구
public void setDistrict() {
String[] splitted = address.split(" ");
this.district = String.format("%s %s", splitted[0], splitted[1]);
}
Java
복사
3.
subdivision은 병원이름(name)을 기준 (피부과, 성형외과, 외과, 내과, 소아과, 가정의학과, 치과, 등) - 이 단어가 포함 되어 있으면 ex) 피부과가 포함 되어 있으면 피부과 - setSubdivision()
private String getSubdivision(String name) {
String[] subdivisions = {"소아", "피부", "성형", "정형외과", "척추", "교정", "산부인과", "관절", "봉합", "화상", "골절", "영유아", "안과", "가정의학과", "비뇨기과", "치과", "내과", "외과"};
for (String subdivision : subdivisions) {
if (name.contains(subdivision)) {
return subdivision;
}
}
return "";
}
Java
복사
임학준
조국현
최아영
버블 정렬
두 개의 수를 비교하여 크기순으로 정렬하는 것을 반복한다.
1 | 7 | 3 | 9 | 28 | 11 |
7과 3 교환
1 | 7 | 3 | 9 | 28 | 11 |
1 | 3 | 7 | 9 | 28 | 11 |
1 | 7 | 3 | 9 | 28 | 11 |
28과 11 교환
1 | 7 | 3 | 9 | 28 | 11 |
1 | 7 | 3 | 9 | 11 | 28 |
회전을 수행하고 나면 가장 큰 수가 맨 뒤로 이동하므로 다음 회전에서 제외된다.
나의 코드
강사님 코드
TDD란?
•
Test Driven Development의 약자로 테스트 주도 개발이라고 한다.
•
작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.