1) 배열 : Arrays.Sort()
2) list : Sort()
즉, 이진 탐색의 시간 복잡도는 O(logN) 이 된다.
데이터 빈번하게 처리할때 사용한다.
1 ) word counting : map 쓰면된다.
2) max 구할때 : Treemap 쓴다.

1) 함수, 메소드 호출 관리
1) 통신에서 사용


Q1. TodoApp에서 clone으로 깊은 복사를 사용하는 이유?
ㄴ object.clone()는 얕은 복사 implement로 clonable을 구현해서 object.clone()를 쓰면 깊은 복사가 됨.
ㄴ class에서 override 할 때 리턴 타입을 object로 하는 이유? -> super클래스의 리턴 타입이 Object이기 때문
@Override
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
ㄴ 깊은 복사를 쓰지 않으면 수정 데이터 입력 하자마자 수정이 이루어 져서 원본이 수정됨(의도와 맞지 않는 side effect). update 실행시 update가 되게 하기 위해 깊은 복사 사용
updateTodo.setTitle(title);
updateTodo.setDescription(description);
updateTodo.setDone(done);
dao.update(updateTodo);
Q2. ToDo 예제에서 protected 클래스를 상속 받아 public으로 바꾸는 이유?
ㄴ protect는 다른 package에서 사용할 수 없기 때문.public으로 바꿔서 활용가능하게 하기 위해
ㄴQ2-1. 같은 package의 범위?
ㄴ마지막 경로. ex) org.scoula.lib.cli.App;와 org.scoula.lib.cli.ui;는 다른 경로다. (but 경로 != 패키지) 경
Q3. "settings.gradle"에서 include ':Scoulacli'와 'project(':Scoulacli').projectDir=new File('C:\\fullstack\\04_JAVA\\ScoulaLib\\scoulacli')''의 의미?
ㄴ include는 이름 선언, project는 경로를 넣는 것. => gradle의 setting 설정.
ㄴ build.gradle 은 프로젝트 설정
ㄴScoulacli은 명칭일 뿐이라서 변경 가능 ( 아무 단어나 써도 괜찮습니다 )
04.
오버로딩 -> 하나의 메소드를 다양한 매개변수를 넣어서 사용할 수 있음
오버라이드 -> 자식이 부모의 메소드를 재정의
오버라이딩 -> 자식이 부모의 메소드를 재정의한 것을 사용하는 상태
5.
public object Test() {
int num = 1
int num1 = 2
int num2 = num + num1
return num2
}
=> object는 최상위 객체 클래스라서 int로 자동 형변환이 되어 실행 가능