Jerry's Log

JCF

contents

Java Collections Framework (JCF) 는 객체의 그룹(컬렉션)을 표현하고 조작하기 위한 통일된 아키텍처입니다. 자바 개발자, 특히 백엔드 개발자에게는 가장 기초적이고 필수적인 도구 상자입니다.

핵심은 정렬이나 검색 알고리즘을 밑바닥부터 직접 짤 필요 없이, 데이터를 효율적으로 처리할 수 있도록 표준화된 인터페이스(Interface, 추상 데이터 타입)구현체(Implementation, 재사용 가능한 자료구조) 를 제공한다는 점입니다.


1. 큰 그림: 계층 구조 (Hierarchy) 🏛️

JCF는 java.util 패키지에 정의되어 있습니다. 크게 두 개의 메인 트리로 나뉩니다.

  1. Collection 인터페이스: 객체들의 그룹 (Lists, Sets, Queues).
  2. Map 인터페이스: 키-값(Key-Value) 쌍의 그룹. (주의: MapCollection을 상속받지 않습니다).

2. Collection 계열 📦

루트 인터페이스인 CollectionIterable을 상속받습니다(즉, 향상된 for-each 루프를 사용할 수 있습니다).

A. List (순서 있음, 중복 허용)

List는 인덱스(0, 1, 2...)를 중요하게 생각합니다. 데이터가 들어온 순서(Insertion order)를 유지합니다.

B. Set (유일성, 중복 불가)

Set은 수학의 집합을 모델링합니다. 중복된 요소(e1.equals(e2))를 허용하지 않습니다.

C. Queue & Deque (처리 대기열)

처리를 기다리는 요소들을 담아두는 데 사용됩니다 (FIFO - 선입선출).


3. Map 계열 🗺️

Map은 키-값(Key-Value) 쌍으로 작동합니다. 키는 유일해야 하며, 값은 중복될 수 있습니다.


4. 헬퍼 클래스 (유틸리티) 🛠️

자료구조만 사용하는 것이 아니라, 이를 조작하는 도구들도 사용합니다.


5. 반복(Iteration)과 "Fail-Fast" 🔄

이들을 어떻게 순회할까요?

Iterator it = list.iterator();
while(it.hasNext()) {
	String s = it.next();
	if(s.equals("bad")) it.remove(); // 안전한 삭제
}

6. 백엔드 개발자를 위한 요약

인터페이스 구현체 순서 중복? 추천 용도
List ArrayList 입력 순서 O 일반적인 용도, 랜덤 액세스.
LinkedList 입력 순서 O 양 끝에서 빈번한 추가/삭제.
Set HashSet 랜덤 X "이게 존재하는가?" 확인용, 중복 제거.
TreeSet 정렬됨 X 정렬된 유일 데이터.
Map HashMap 랜덤 키: X 키-값 조회, 캐싱.
TreeMap 키 정렬됨 키: X 키 범위 검색.

동시성(Concurrency) 주의사항

표준 JCF(ArrayList, HashMap)는 스레드 안전(Thread-safe)하지 않습니다.

백엔드 환경(Spring Boot 요청 처리 등)에서 여러 스레드가 동시에 컬렉션에 접근한다면 반드시 다음을 사용해야 합니다:

  1. java.util.concurrent 패키지:
    • ConcurrentHashMap (Hashtable/SynchronizedMap 대신 사용).
    • CopyOnWriteArrayList (스레드 안전한 List).
    • BlockingQueue (생산자-소비자 패턴용).

references