Language/JAVA

[이것이 자바다].ch14.컬렉션

JSJH._. 2025. 12. 30. 17:20

[이것이 자바다] 14. 컬렉션

안녕하세요. 이번에는 자바의 자료구조, 컬렉션 프레임워크에 대해 정리한 내용입니다.
자료구조는 코딩할때 정말 필수적이고 중요한 부분이죠, 근데 직접 구현해본 사람은 알지만 정말 귀찮습니다. 만약 자료구조를 쓸때마다 모든 함수를 자기가 구현하고 사용해야하면 귀찮아 죽을겁니다. 그래서 컬렉션으로 미리 만들어둔 자료구조를 쓴다면 시간이나 노력을 절약할수있습니다.


1. 컬렉션 프레임워크란?

  • 여러 개의 객체(데이터)를 저장하고 관리하기 위해 자바가 제공하는 표준화된 자료구조의 묶음입니다.
  • 배열의 고정 크기 단점을 해결하고, 데이터의 추가/삭제/검색 기능을 편리하게 제공합니다.
  • 주요 인터페이스: List, Set, Map

2. List<E> 인터페이스 (순서 O, 중복 O)

  • 데이터를 순서대로 저장하며, 인덱스로 관리합니다. 중복 저장이 가능합니다. (배열과 유사)

ArrayList<E>

  • 배열 기반: 내부적으로 배열을 사용합니다.
  • 장점: 인덱스를 통한 조회(get) 속도가 매우 빠릅니다.
  • 단점: 중간에 데이터를 추가/삭제하면 뒤의 데이터를 밀거나 당겨야 하므로 느립니다.

LinkedList<E>

  • 연결 기반: 각 데이터가 앞뒤 데이터의 주소를 기억하는 구조입니다.
  • 장점: 중간 데이터의 추가/삭제가 빠릅니다. (주소만 바꾸면 됨)
  • 단점: 인덱스 조회가 느립니다. (처음부터 건너가야 함)

Vector: ArrayList와 동일하지만 동기화(Synchronized)가 적용되어 멀티 스레드에 안전합니다. (하지만 보통 ArrayList를 동기화 처리해서 씁니다.)

3. Set<E> 인터페이스 (순서 X, 중복 X)

  • 중복을 허용하지 않는 데이터의 집합입니다. 순서가 보장되지 않습니다. 인덱스로 접근 불가합니다.

HashSet<E>

  • 가장 일반적으로 사용되는 Set 입니다.
  • 중복 판단 과정: hashCode() 비교 >> 같다면 equals() 비교 >> 둘 다 같으면 중복으로 판단하여 저장하지 않습니다.

TreeSet<E>

  • 이진 탐색 트리(BST) 구조입니다.
  • 저장과 동시에 자동으로 오름차순 정렬됩니다.
  • 범위 검색(subSet, headSet 등)에 유리합니다.

4. Map<K, V> 인터페이스 (키 중복 X, 값 중복 O)

  • 키(Key)값(Value)의 쌍(Entry)으로 데이터를 관리합니다.
  • 키는 중복될 수 없지만, 값은 중복 가능합니다.

HashMap<K, V>

  • 가장 일반적으로 사용되는 Map 입니다.
  • 키(Key) 객체의 hashCode()equals()를 이용해 중복 키를 식별합니다.

TreeMap<K, V>

  • 이진 트리 기반 구조입니다.
  • 키(Key)를 기준으로 자동 오름차순 정렬됩니다.

Properties

  • 키와 값을 모두 String 타입으로 제한한 Map 입니다.
  • 주로 .properties 설정 파일을 읽을 때 사용합니다.

5. LIFO / FIFO

  • Stack (LIFO): 후입선출. 나중에 넣은 게 먼저 나옵니다. (push, pop)
  • Queue (FIFO): 선입선출. 먼저 넣은 게 먼저 나옵니다. (offer, poll)

핵심 포인트

  • 데이터의 특성에 따른 선택
    • 순서 매김 & 중복 허용 필요? >> List (주로 ArrayList)
    • 중복 제거 필요? >> Set (주로 HashSet)
    • 키-값 쌍 관리 필요? >> Map (주로 HashMap)
  • 수정 불가능 컬렉션 (Java 9+)
    • List.of(), Set.of(), Map.of()를 사용하면 변경 불가능한(Immutable) 컬렉션을 쉽게 만들 수 있습니다.

감사합니다.