본문 바로가기
▶개발/JAVA

[JAVA] 자바 정리노트(4)

by 브라더 준 2019. 1. 26.

[JAVA] 자바 정리노트(4)

- 시간, 날짜 관련 클래스와 컬렉션 프레임웤 -


1. Calendar클래스는 추상클래스이므로 인스턴스를 생성할 수 없다. 그래서 getInstance() 메소드를 이용하여 인스턴스를 얻어야 한다. 이 때 시스템의 국가를 확인하여 BuddhistCalendar(태국에만 해당) 혹은 GregorianCalendar의 완성된 인스턴스를 자동 반환해준다. (추상클래스에 사용되는 getInstance() 메소드는 당연히 static이다.)

Calendar cal = Calendar.getInstance();


2. 'java.time' 패키지에서 날짜를 표현할 때에는 LocalDate 클래스를 사용하며, 시간을 표현할 때에는 LocalTime 클래스를 사용한다. 혹은 날짜와 시간을 모두 사용하고자할 때에는 LocalDateTime 클래스를 사용한다. 추가적으로 시간대까지 사용한다면 ZonedDateTime 클래스를 사용한다.


3. 'java.time' 패키지에서 날짜간의 차이를 Period, 시간간의 차이를 Duration이라 한다.


4. compareTo() 메소드는 같으면 0, 이전이면 -1, 이후일 경우 1을 반환한다.

int a = 3;
int b = 4;
int result = a.compareTo(b);
// 3보다 4가 이후라서 result는 1이 된다.


5. 시간대가 다른 컴퓨터간의 통신에서는 LocalDateTime 표현이 아닌 'OffsetDateTime'을 사용한다.


6. 컬렉션 프레임워크에는 크게 3개의 그룹으로 나눠진다. List는 중복을 허용하면서 저장순서가 유지됨에 반해, Set은 중복이 불가하며 저장순서가 유지되지 않는다. Map 인터페이스는 키는 중복이 불가하며 값만 중복을 허용한다.


7. List 인터페이스의 ArrayList의 경우, 요소를 삭제시킬 경우 나머지 요소들이 자리이동을 한다. 혹여나 요소들을 차례대로 검사, 삭제할 경우 제어변수를 감소시켜가면서 작업을 수행해야 자리이동이 발생하더라도 정상적인 작업이 가능하다.


8. ArrayList를 생성할 때 저장 요소의 크기를 실제 개수보다 여유있게 잡는다. 물론 자동으로 크기가 늘어나지만 처리시간이 많이 소요된다. 이유인즉 용량을 변경할 때는 새로운 배열을 생성하여 기존의 배열의 요소들을 새로 복사해야하기 때문이다. Vector또한 마찬가지이다. 그래서 ArrayList는 데이터를 읽어오거나 저장할 때에만 유리하다. 이 단점을 LinkedList가 극복하였다.


9. LinkedList의 이동방향은 단방향이다. 그래서 이전 방향의 요소에 접근하는 것이 어려워 이전 요소의 주소값을 추가로 담을 수 있게 한 Doubly linked list가 등장했다. 실제로 LinkedList 클래스에는 더블 링크드 리스트로 구현됐다.


10. 더블 링크드 리스트보다 더 접근성을 확보하기 위해 첫 요소와 마지막 요소를 서로 연결시켰는데 원이 구성되었다는 의미로 이를 'doubly circular linked list'라 부른다.


11. 인터페이스 Comparable은 기본 정렬기준을 구현하는데 사용되며, 인터페이스 Comparator는 다른 기준으로 정렬하고자 할 때 사용된다. 예를 들어 역순 정렬(compareTo 결과에 * -1)이나, 대소문자를 섞어서 정렬할 경우 Comparator를 사용하면 된다.


12. HashSet은 저장순서를 유지하지 않는다. 순서를 유지하고자 한다면 LinkedHashSet을 사용한다.


13. TreeSet 또한 저장순서를 유지하지 않는다. 이유인즉 정렬된 위치에 저장하기 떄문이다. 이러한 이유로 노드의 추가 삭제에 시간이 꽤나 소요된다. 


14. HashMap은 해싱(해시함수를 이용해 데이터를 해시테이블에 저장, 검색하는 기법 : 배열과 링크드 리스트의 조합)을 사용하기에 많은 양의 데이터를 검색함에 있어 뛰어난 성능을 낸다.또한 키 혹은 값에 null을 허용한다. 반면에 이전 버전인 HashTable은 널을 허용하지 않는다.


15. TreeMap은 범위검색, 정렬이 필요한 경우 사용된다. 그러나 검색 성능은 HashMap이 뛰어나다.


16. java.util.Collection은 인터페이스이며, java.util.Collections는 클래스이다.

반응형