백엔드/Java

자바 컬렉션 프레임워크 뽀개기: List, Set, Map 언제 사용해야 할까?

hawon6691 2025. 10. 6. 10:52
728x90

자바 개발자라면 누구나 **컬렉션 프레임워크(Collections Framework)**를 사용합니다. 데이터를 효율적으로 저장하고 관리하는 데 필수적인 요소죠. 하지만 List, Set, Map 세 가지 주요 인터페이스 중 어떤 것을 언제 사용해야 할지 헷갈릴 때가 많습니다. 데이터의 특성요구 사항에 따라 적절한 컬렉션을 선택하는 것이 성능 최적화의 핵심입니다.


1. List: 순서와 중복이 필요할 때

List는 가장 기본적인 컬렉션 형태로, 배열과 유사하게 데이터를 순서대로 저장하며 중복된 요소를 허용합니다. 데이터의 삽입 순서가 유지되며, 인덱스를 통해 특정 요소에 접근할 수 있습니다.

특징 설명
순서 유지 (Ordered) 요소가 삽입된 순서를 기억하며, 인덱스로 접근 가능 (‘list.get(index)‘).
중복 허용 (Allows Duplicates) 동일한 요소를 여러 번 저장할 수 있습니다.

List는 언제 사용해야 할까요?

  • 데이터의 순서가 중요하고, 삽입 순서대로 처리해야 할 때 (예: 웹 브라우저 방문 기록, 실행해야 할 작업 목록).
  • 중복된 데이터 저장이 허용될 때 (예: 주문 내역 리스트, 학생들의 시험 점수 리스트).
  • ArrayList는 무작위 접근(random access)이 빈번할 때 (조회 성능 우수), LinkedList는 데이터의 잦은 삽입/삭제가 필요할 때 (추가/제거 성능 우수) 선택합니다.

2. Set: 유일성(Unique)이 가장 중요할 때

Set은 이름에서 알 수 있듯이 '집합'의 개념을 따릅니다. 가장 중요한 특징은 중복된 요소를 허용하지 않는다는 것입니다. 요소의 유일성을 보장하며, 일반적으로 순서가 유지되지 않습니다 (구현체에 따라 다름).

특징 설명
중복 불가능 (No Duplicates) 모든 요소는 고유해야 합니다. 중복된 요소를 추가하려 하면 무시됩니다.
순서 비유지 (Unordered) 일반적으로 순서가 없습니다 (HashSet 기준).

Set은 언제 사용해야 할까요?

  • 컬렉션 내 모든 요소가 고유해야 함을 보장해야 할 때 (예: 사용자 ID 목록, 당첨 번호 목록).
  • 중복 요소를 자동으로 제거하고 싶을 때.
  • HashSet은 삽입/검색 성능이 빠르지만 순서를 보장하지 않으며, LinkedHashSet은 삽입 순서를 유지하고, TreeSet은 요소들을 정렬된 상태로 유지합니다.

3. Map: 키-값(Key-Value) 쌍으로 저장해야 할 때

Map은 List나 Set과는 다르게 **키(Key)**와 **값(Value)**의 쌍으로 데이터를 저장합니다. 마치 사전처럼 를 통해 을 즉시 검색할 수 있어 매우 빠른 조회가 가능합니다. 여기서 키는 유일해야 하지만, 값은 중복될 수 있습니다.

특징 설명
키-값 쌍 저장 데이터를 키와 값의 한 쌍으로 저장합니다.
키는 유일 (Unique Keys) 각 값에 대응하는 키는 반드시 고유해야 합니다.
빠른 조회 키를 통해 값을 **O(1)**에 가까운 시간 복잡도로 빠르게 찾을 수 있습니다.

Map은 언제 사용해야 할까요?

  • 데이터를 **특정 식별자(Key)**로 빠르게 찾고 싶을 때 (예: 사용자 ID를 키로, 사용자 정보를 값으로 저장).
  • 두 정보 사이의 매핑(Mapping) 관계를 표현해야 할 때 (예: 국가 코드와 국가명, 설정 속성과 값).
  • HashMap은 가장 일반적이고 빠른 구현체이며, LinkedHashMap은 삽입 순서를 유지하고, TreeMap은 키를 기준으로 정렬하여 저장합니다.

💡 요약 정리: 선택 기준 한눈에 보기

컬렉션 인터페이스 순서 (Order) 중복 (Duplicates) 주요 용도
List O (유지) O (허용) 순서가 중요하거나 중복이 허용되는 데이터 목록
Set X (구현체에 따라 다름) X (불가) 요소의 유일성(Uniqueness)을 보장해야 할 때
Map X (키-값 쌍) 키는 불가, 값은 허용 키를 통해 값을 효율적으로 찾을 때 (매핑 구조)

자바에서 데이터를 다룰 때 이 세 가지 컬렉션의 특징을 명확히 이해하고 적재적소에 활용한다면, 더 효율적이고 견고한 코드를 작성할 수 있을 겁니다.

728x90