//////
Search
📓

10/13 회고록

생성일
2022/10/13 07:11
태그

김기헌

어노테이션(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의 약자로 테스트 주도 개발이라고 한다.
작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.