Java 컬렉션 프레임워크
Java 컬렉션 프레임워크(Java Collections Framework, JCF)는 데이터를 효율적으로 저장, 관리, 검색하는 표준화된 방법을 제공하는 클래스와 인터페이스의 집합입니다. 이 프레임워크는 크게 Collection 계층과 Map 계층이라는 두 가지 메인 루트로 나뉩니다.

1.Collection 계층(단일 요소 저장)
Collection 인터페이스는 단일 요소(데이터 값)의 그룹을 다루는 최상위 부모입니다. 이 계층은 데이터를 저장하는 방식과 규칙에 따라 List, Set, Queue 세 가지 주요 인터페이스로 분화됩니다.
| 인터페이스 | 특징 | 중복허용 | 순서 보장 | 주요 구현 클래스 |
| List | 순서대로 저장되며, 인덱스를 통해 접근 가능 | O | O(삽입 순서) | ArrayList, LinkedList, Vector |
| Set | 저장된 요소들이 고유해야 함. | X | X(대부분) | HashSet, TreeSet, LinkedHashSet |
| Queue | 삽입과 추출의 순서가 정해져 있음(FIFO 또는 LIFO) | O | O(처리 순서) | LinkedList, PriorityQueue |
핵심 클래스 요약
- ArrayList vs LinkedList:
- ArrayList는 내부적으로 배열을 사용해 인덱스 접근(검색)이 빠릅니다.
- LinkedList는 노드를 연결해 데이터 추가/삭제가 빠릅니다.
- HashSet vs TreeSet:
- HashSet은 해싱(Hashing)을 사용하여 매우 빠른 성능을 제공하지만, 순서를 보장하지 않습니다.
- TreeSet은 트리(Tree) 구조를 사용하여 요소를 오름차순으로 정렬하여 저장합니다.
2. Map계층(키-값 쌍 저장)
Map 인터페이스는 Collection 인터페이스를 상속받지 않는 독립적인 구조입니다. 데이터를 키(Key)와 값(Value)의 쌍으로 저장하며, 키를 통해 값을 검색하는 데 특화되어 있습니다.
| 인터페이스 | 특징 | 키 중복 | 값 중복 | 순서 보장 | 주요 구현 클래스 |
| Map | 키와 값의 쌍으로 저장. 키는 고유해야함 | X | O | X(대부분) | HashMap, TreeMap, LinkedHashMap |
핵심 클래스 요약
- HashMap: 가장 빠르고 일반적으로 사용됩니다. 해싱을 사용하며, 삽입 순서나 정렬 순서를 보장하지 않습니다.
- LinkedHashMap: HashMap과 동일하게 작동하지만, 요소들이 삽입된 순서를 유지합니다. (순서가 필요한 경우 사용)
- TreeMap: 키를 기준으로 항상 정렬된 상태를 유지합니다. (정렬이 필요한 경우 사용)
3. 컬렉션과 맵의 주요 차이점
| 구분 | Collection (List, Set, Queue) | Map (HashMap, TreeMap 등) |
| 저장 단위 | 단일 데이터 (Value) | 키(Key)와 값(Value)의 쌍 |
| 관계 | IS-A관계 : Collection은 Iterable을 상속받는 계층의 일부. | 독립정 : Collection 계층에 속하지 않음 |
| 핵심 목적 | 데이터의 집합 관리 (순서, 유일성 등) | 매핑을 통한 빠른 데이터 검색 |
컬렉션 뷰(Views)
Map은 Collection이 아니지만, Map에 저장된 데이터를 Collection 또는 Set 형태로 볼 수 있는 메서드를 제공합니다.
- keySet(): 맵의 모든 키를 포함하는 Set을 반환합니다.
- values(): 맵의 모든 값을 포함하는 Collection을 반환합니다.
- entrySet(): 맵의 모든 키-값 쌍(Map.Entry 객체)을 포함하는 Set을 반환합니다. (정렬된 Map을 스트림으로 처리할 때 주로 사용됨)
4. 제네릭과 동기화
제네릭 (Generics)
JCF는 제네릭을 사용하여 컬렉션에 저장되는 객체의 타입을 지정합니다. 이를 통해 컴파일 시점에 타입 안정성을 확보하고, 런타임에 불필요한 캐스팅 오류(ClassCastException)를 방지합니다.
- 예시: List<String> names = new ArrayList<>()는 이 리스트가 오직 String 객체만 저장하도록 보장합니다.
동기화 (Synchronization)
기본적으로 대부분의 JCF 구현체(ArrayList, HashMap, HashSet 등)는 비동기화(non-synchronized) 상태입니다. 이는 단일 스레드 환경에서 최고의 성능을 제공합니다.
- 멀티스레드 환경에서 안전하게 사용하려면:
- 레거시 클래스 사용: Vector, Hashtable (성능 문제로 권장되지 않음)
- 래퍼(Wrapper) 사용: Collections.synchronizedList(List)와 같이 Collections 클래스의 정적 메서드를 사용하여 동기화된 버전을 얻을 수 있습니다.
- 동시성 컬렉션 사용: ConcurrentHashMap 등 java.util.concurrent 패키지의 클래스를 사용하여 더 나은 성능과 스케일링을 확보하는 것이 현대적인 방법입니다.
반응형
'서버&백엔드 > 🔥 JAVA' 카테고리의 다른 글
| JAVA | Scanner에서 next()와 nextLine() 차이 (0) | 2025.10.20 |
|---|---|
| Java | 대표적인 다형성 메서드 (1) | 2025.02.04 |
| Java | 스레드 순차적으로 실행하는 법 (0) | 2025.02.04 |
| 힙 메모리 부족 문제 (0) | 2025.02.04 |
| 스레드에서 생성된 메모리 영역은 다른 스레드에서 접근 가능할까? (0) | 2025.02.04 |