포스트

JAVA (17) - 컬렉션 프레임워크

JAVA (17) - 컬렉션 프레임워크

1. 개요

자바의 컬렉션 프레임워크(Collection Framework)는 다수의 데이터를 효율적으로 저장, 관리, 조작할 수 있도록 표준화된 데이터 구조와 알고리즘을 제공하는 클래스와 인터페이스의 집합이다. 배열(Array)이 고정된 크기만을 지원하는 한계를 극복하기 위해 가변 크기의 데이터 구조를 제공하며, 표준화된 인터페이스를 통해 일관된 방식으로 데이터를 다룰 수 있게 해준다.

2. 컬렉션 프레임워크의 핵심 인터페이스 구조

자바 컬렉션 프레임워크는 크게 Collection 인터페이스와 Map 인터페이스 두 개의 주요 줄기로 나뉜다.

1
2
3
4
5
6
7
8
9
10
                  Iterable
                     │
                 Collection
      ┌──────────────┼──────────────┐
     List           Set           Queue
      │              │              │
 ArrayList      HashSet        LinkedList
LinkedList      TreeSet         ArrayDeque
 Vector

(※ Map 인터페이스는 구조상의 이유로 Collection을 상속받지 않고 독립적으로 존재한다.)

3. List 인터페이스

순서가 있는 데이터의 집합이며, 데이터의 중복을 허용한다.

  • ArrayList: 내부적으로 가변 배열을 사용하여 데이터를 관리한다. 인덱스(Index)를 통한 데이터 조회(get) 속도가 빠르다($O(1)$). 반면, 중간에 데이터를 삽입하거나 삭제할 때는 요소들의 이동이 필요하여 성능이 저하된다.
  • LinkedList: 양방향 연결 리스트 구조로 구현되어 있다. 요소의 삽입과 삭제가 빈번하게 발생하는 상황에서 뛰어난 성능을 보인다. 인덱스 조회의 경우 처음부터 순회해야 하므로 $O(N)$의 시간 복잡도를 갖는다.

4. Set 인터페이스

순서를 유지하지 않는 데이터의 집합이며, 중복을 허용하지 않는다.

  • HashSet: 해시 테이블(Hash Table) 기반으로 구현되어 데이터를 저장하고 검색한다. 요소의 추가, 삭제, 검색 속도가 매우 빠르다($O(1)$). 중복 여부를 판단할 때 저장되는 객체의 hashCode()equals() 메서드를 활용한다.
  • TreeSet: 이진 탐색 트리(Red-Black Tree) 구조를 기반으로 구성된다. 데이터가 자동으로 오름차순 또는 지정한 정렬 기준에 따라 정렬되어 저장된다. 검색 및 정렬 연산에 $O(\log N)$의 시간이 소요된다.

5. Map 인터페이스

키(Key)와 값(Value)의 쌍으로 데이터를 관리한다. 키는 중복될 수 없으나, 값은 중복을 허용한다.

  • HashMap: 키와 값을 해시 테이블 구조로 저장한다. 키의 중복을 허용하지 않으며, 순서를 보장하지 않는다. 가장 흔하게 사용되는 Map 구현체다.
  • TreeMap: 키를 기준으로 자동 정렬되는 Map 구조다. 정렬된 상태로 키-값 쌍을 조회하거나 범위 검색이 필요할 때 유용하다.
  • ConcurrentHashMap: 다중 스레드(Multi-thread) 환경에서 스레드 안정성(Thread-safety)을 제공하면서도, 기존의 Hashtable 대비 높은 성능을 발휘하도록 분할 Lock 메커니즘을 사용한다.

6. Stack과 Queue, Deque

  • Stack: LIFO(Last In First Out, 후입선출) 구조를 갖는 자료구조다. 현재는 Stack 클래스 대신 Deque 인터페이스를 사용하는 것이 권장된다.
  • Queue: FIFO(First In First Out, 선입선출) 구조를 갖는다. 주로 LinkedListArrayDeque로 구현하여 사용한다.
  • Deque (Double Ended Queue): 양쪽 끝에서 요소의 삽입과 삭제가 모두 가능한 구조다. Stack과 Queue의 기능을 모두 수행할 수 있다.

7. 정리

자바 컬렉션 프레임워크는 상황에 맞는 최적의 데이터 구조를 선택할 수 있게 해준다. 순서가 중요하고 중복 조회가 빈번하다면 List(ArrayList), 중복을 제거해야 한다면 Set(HashSet), 키-값 형태의 매핑 데이터라면 Map(HashMap)을 선택하는 것이 기본 규칙이다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.