컬렉션 프레임워크란?
컬렉션(Collection)은 다수의 데이터를 효율적으로 관리하기 위한 데이터 구조와 알고리즘의 집합이다. Java의 컬렉션 프레임워크는 데이터의 저장, 검색, 수정, 삭제를 손쉽게 처리할 수 있도록 설계된 클래스와 인터페이스를 제공한다.
컬렉션 프레임워크의 주요 인터페이스
1. List
특징: 순서를 유지하며, 중복을 허용하는 데이터 집합
사용 상황: 데이터의 순서가 중요한 경우에 사용된다. 예를 들어, 영화 순위 목록이나 학생 명단처럼 데이터의 순서가 중요하고 같은 값을 여러 번 넣을 수 있는 경우에 적합하다.
주요 구현체: ArrayList, Vector, LinkedList
2. Set
특징: 중복을 허용하지 않으며, 순서를 보장하지 않는 데이터 집합
사용 상황: 중복을 제거하고 싶을 때 사용한다. 예를 들어, 고유한 사용자 ID나 이메일 목록처럼 중복된 값을 허용하지 않는 경우에 적합하다. 순서는 중요하지 않지만, 일부 구현체에서는 삽입 순서를 유지하기도 한다.
주요 구현체: HashSet, LinkedHashSet, TreeSet
3. Map
특징: 키-값 쌍으로 데이터를 저장하며, 키는 중복을 허용하지 않지만 값은 중복을 허용하는 데이터 집합
사용 상황: 데이터를 키와 값의 쌍으로 저장할 때 유용하다. 예를 들어, 학생 ID와 이름을 매칭하는 데이터처럼 각각의 키에 대해 하나의 값만을 저장해야 하는 경우에 사용된다. 키는 중복될 수 없고, 값은 중복을 허용한다.
주요 구현체: HashMap, LinkedHashMap, TreeMap, Hashtable
List 인터페이스의 주요 구현체
1. ArrayList
동적 배열을 기반으로 하며, 데이터 조회가 빠르다. 삽입/삭제는 끝부분에서 빠르지만, 중간 삽입/삭제 시 성능 저하가 발생할 수 있다. 크기를 동적으로 늘릴 때 성능 비용이 발생할 수 있다.
2. Vector
ArrayList와 유사하지만, 동기화(synchronization) 처리가 기본적으로 적용되어 멀티스레드 환경에서 안전하다. 성능이 낮아 최근에는 잘 사용되지 않으며, 동기화된 컬렉션이 필요하다면 Collections.synchronizedList()나 CopyOnWriteArrayList를 사용하는 것이 권장된다.
3. LinkedList
이중 연결 리스트를 기반으로 하여, 삽입/삭제가 빠르다. 임의 접근(인덱스 기반)은 느리고, 메모리 사용량이 많다. Deque 인터페이스를 구현하여 스택 및 큐로도 활용 가능하다.
Set 인터페이스의 주요 구현체
1. HashSet
내부적으로 HashMap을 사용하며, 객체의 hashCode()와 equals()를 기반으로 중복을 판단한다. 빠른 검색, 추가, 삭제가 필요할 때 유리하지만, 데이터의 순서를 보장하지 않는다.
2. LinkedHashSet
HashSet과 유사하지만, 삽입 순서를 유지한다. 중복을 허용하지 않으면서도 순서가 중요한 경우에 적합하다.
3. TreeSet
내부적으로 이진 트리 구조(TreeMap)를 기반으로 하며, 데이터가 자동으로 정렬된다. 기본적으로 자연 순서에 따라 정렬되며, 사용자 정의 Comparator로 정렬 기준을 설정할 수 있다.
Map 인터페이스의 주요 구현체
1. HashMap
순서를 보장하지 않으며, 빠른 검색과 추가/삭제가 가능하다. 키와 값에 null을 허용한다. 멀티스레드 환경에서는 동기화 처리가 필요하며, 이를 위해 ConcurrentHashMap 사용이 권장된다.
2. LinkedHashMap
삽입 순서를 유지한다. accessOrder를 true로 설정하면, 접근 순서를 유지할 수도 있어 LRU(Least Recently Used) 캐시를 구현할 때 유용하다.
3. TreeMap
키를 자동으로 정렬된 상태로 유지한다. 기본적으로 키의 자연 순서에 따라 정렬되며, 사용자 정의 Comparator로 정렬 방식을 변경할 수 있다.
4. Hashtable
HashMap과 유사하지만, 동기화 처리가 되어 멀티스레드 환경에서 안전하다. 하지만 성능 문제로 최근에는 ConcurrentHashMap을 더 많이 사용한다.
정리
List: 순서가 중요한 경우
Set: 중복 제거가 필요한 경우
Map: 키-값 쌍으로 데이터를 저장해야 하는 경우
참고 자료: https://docs.oracle.com/en/java/javase/23/docs/api/index.html
'Language > JAVA' 카테고리의 다른 글
[JAVA]정규 표현식 (0) | 2025.01.14 |
---|---|
[JAVA]Stack, Queue 컬렉션(Collection) (2) | 2024.12.25 |
[JAVA]method 종류 (0) | 2024.11.20 |
[JAVA]메모리 구조 (0) | 2024.11.04 |
[JAVA]정적 메소드에서 this를 사용할 수 없는 이유 (2) | 2024.11.03 |