Don't give up!

[JAVA] 자바의 정석 정리 (11장-② ) 본문

개발서적/JAVA의 정석

[JAVA] 자바의 정석 정리 (11장-② )

Heang Lee 2021. 6. 5. 22:37
자바의 정석을 읽고 정리한 내용입니다.

Java의 정석 - YES24

 

Java의 정석

최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 `자바의 정석`의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아

www.yes24.com


1. TreeSet

(1) TreeSet은 정렬, 검색, 범위검색에 높은 성능을 보이는 컬렉션이며 이진 검색 트리(Binary Search Tree)의 성능을 향상시킨 레드-블랙 트리(Red-Black Tree)로 구현되어 있다.

(2) 부모 노드는 좌측 자식 노드보다 큰 값을 갖고, 우측 자식 노드보다 작은 값을 갖는다. 해당 정렬 상태를 유지하기 때문에 검색에서 큰 효율을 보인다.

(3) 데이터를 순차적으로 저장하는 것이 아니기 때문에 저장 위치를 찾아서 저장해야하고, 삭제하는 경우 트리의 일부를 재구성해야 하므로 LinkedList보다 데이터의 추가/삭제 시간이 더 소요된다.

(4) floor함수는 객체를 탐색하여 반환하고, 없으면 작은 값을 가진 객체 중 가장 가까운 객체를 반환한다. 보다 작은 객체가 없으면 null을 반환한다. ceiling함수는 반대로, 없으면 큰 값을 갖는 객체 중 가장 가까운 객체를 반환.

(5) headSet함수는 지정된 객체보다 작은 값의 객체들을 SortedSet 또는 NavigableSet에 담아 반환한다. tailSet함수는 객체보다 큰 값의 객체들에 대해 검색함.

(6) higher는 객체보다 큰 값을 갖는 객체 중 가장 가까운 객체를 반환한다. lower는 작은 값을 갖는 객체 중 가장 가까운 값을 반환.

(7) subSet함수는 범위 검색의 결과를 반환한다. SortedSet 또는 NavigableSet의 형태로 반환.

2. HashMap

(1) HashMap은 해싱을 사용하여 key-value를 묶어서 하나의 데이터로 저장한다.

(2) HashMap은 Entry라는 내부 클래스를 정의한다. key와 value는 별개의 값이 아니라 서로 관련된 값이기 때문에 각각의 배열로 선언하기 보다는 하나의 클래스로 정의해서 하나의 배열로 다루는 것이 데이터의 무결성(integrity) 측면에서 더 바람직하기 때문.

(3) key와 value를 Object타입으로 저장하기 때문에 어떠한 객체도 저장할 수 있지만 key는 주로 String을 대/소문자 일하여 사용하곤 한다.

(4) 해싱을 구현한 컬렉션 클래스에서는 Object 클래스에 정의된 hashCode( )를 호출한다. 객체의 주소를 이용하는 알고리즘으로 해시코드를 만들어 내기 때문에 모든 객체에 대해 hashCode( )를 호출한 결과가 서로 유일한 훌륭한 방법이다.

(5) String 클래스는 hashCode( )를 오버라이딩해서 문자열의 내용으로 해시코드를 만들어낸다. 다른 String인스턴스일지라도 같은 내용의 문자열을 가졌다면 같은 해시코드를 얻는다.

3. Properties

(1) HashMap의 구 버전인 Hashtable을 상속받아 구현한 것으로 (String, String)의 형태로 저장하는 컬렉션 클래스이다.

(2) 주로 애플리케이션의 환경설정과 관련된 속성을 저장하는데 사용되며 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공한다. 간단한 입출력은 Properties를 활용하면 몇 줄의 코드로 쉽게 해결될 수 있다.

(3) Properties는 Iterator가 아닌 Enumeration을 사용한다. propertyNames( )메서드는 목록의 모든 key가 담긴 Enumeration을 반환한다.

4. Collections

(1) Collections는 컬렉션과 관련된 메서드를 제공한다.

(2) Collections에서는 동기화 메서드를 제공한다. synchronizedCollection, synchronizedList 등 synchronized를 붙여 동기화 메서드를 사용할 수 있다.

(3) unmodifiable의 접미사를 갖는 메서드들은 컬렉션을 읽기전용으로 만들어 반환한다. 멀티 쓰레드 프로그래밍에서 여러 쓰레드가 하나의 컬렉션을 공유하다보면 데이터가 손상될 수 있는데, 이를 방지하기 위해 사용할 수 있다.

(4) singleton 접미사가 달린 메서드들은 하나의 객체만을 저장하는 컬렉션을 반환한다. 반환된 컬렉션은 변경할 수 없다.

(5) checked 접미사를 갖는 메서드들은 지정된 종류의 객체만 저장할 수 있도록 하는 컬렉션 객체를 반환한다. JDK1.5이전에 작성된 코드에서 지네릭스를 사용할 수 없기 때문에 checkedList와 같이 함수를 통해 타입 제한을 할 수 있다.