티스토리 뷰

300x250

자바를 공부하다 보면 생각보다 빨리 마주치는 주제가 바로 컬렉션 프레임워크입니다. 데이터를 여러 개 저장해야 할 때 배열만으로는 불편한 경우가 많고, 그때부터 List, Set, Map 같은 타입이 본격적으로 등장하기 때문입니다.

문제는 여기서부터 시작됩니다. List는 순서가 있다고 하고, Set은 중복이 없다고 하고, Map은 key와 value로 저장한다고 하는데, 막상 코드를 짤 때는 언제 무엇을 써야 하는지, ArrayList와 HashSet, HashMap은 어떤 차이인지, 실무에서 어떤 기준으로 선택하는지가 헷갈리기 쉽습니다.

그래서 이 글에서는 자바 컬렉션 프레임워크를 처음 보는 사람도 이해할 수 있게 Collection Framework의 전체 구조부터, List, Set, Map 차이, 그리고 자주 헷갈리는 포인트와 선택 기준까지 한 번에 정리해보겠습니다.

핵심 요약
Collection Framework는 여러 데이터를 더 편하게 저장·조회·관리하기 위한 자바 표준 구조입니다.
List는 순서가 있고 중복을 허용합니다.
Set은 중복을 허용하지 않으며, 중복 제거 용도로 자주 씁니다.
Map은 key-value 쌍으로 저장하며, 빠른 조회가 필요할 때 많이 씁니다.
가장 중요한 결론은 문법 암기보다 데이터 성격에 따라 List, Set, Map을 구분해서 선택하는 것입니다.
728x90
자바 컬렉션 프레임워크란?
배열보다 더 유연하게 여러 데이터를 다루기 위한 표준 도구 모음입니다.

자바 컬렉션 프레임워크(Collection Framework)는 여러 개의 데이터를 저장하고 다루기 위한 표준 API 집합입니다.

배열은 크기가 고정되어 있고, 중간 삽입·삭제가 불편하며, 중복 제거·검색·정렬 같은 작업도 직접 처리해야 하는 경우가 많습니다. 반면 컬렉션 프레임워크는 이런 작업을 더 편하게 할 수 있도록 다양한 인터페이스와 구현 클래스를 제공합니다.

쉽게 말하면 이렇게 이해하면 됩니다.

배열 = 기본 저장 상자
컬렉션 프레임워크 = 상황에 맞는 저장 도구 세트

예를 들어,

  • 순서대로 데이터를 저장하고 싶으면 List
  • 중복 없이 저장하고 싶으면 Set
  • 이름으로 값을 찾아오고 싶으면 Map

같이 목적에 따라 다른 구조를 선택할 수 있습니다.

컬렉션 프레임워크는 "여러 데이터를 어떻게 저장하고 꺼낼지"를 상황별로 나눠 제공하는 자바의 표준 자료구조 체계입니다.
Collection Framework 구조 한눈에 보기
List, Set, Map이 어디에 속하는지 먼저 잡아두면 이해가 훨씬 쉬워집니다.
Iterable
  └─ Collection
      ├─ List
      │   ├─ ArrayList
      │   └─ LinkedList
      └─ Set
          ├─ HashSet
          └─ TreeSet

Map
  ├─ HashMap
  ├─ LinkedHashMap
  └─ TreeMap

여기서 중요한 점은 MapCollection을 상속하지 않는다는 점입니다. 많이 헷갈리는 포인트인데, ListSetCollection 계열이고, Map은 key-value 저장을 위한 별도 계열이라고 보면 됩니다.

구분 저장 방식 중복 허용 대표 사용 상황
List 값을 순서대로 저장 허용 목록, 순서 유지, 반복 처리
Set 값 집합 저장 불가 중복 제거, 포함 여부 확인
Map key-value 쌍 저장 key 중복 불가 / value 중복 가능 이름으로 값 조회, 캐시, 매핑
List란? 순서가 있는 데이터 목록
가장 먼저 많이 쓰는 컬렉션이며, 배열과 가장 비슷하게 느껴집니다.

List는 입력한 순서대로 데이터를 저장하고, 같은 값도 여러 번 넣을 수 있습니다.

예를 들어 댓글 목록, 상품 목록, 검색 결과 목록처럼 순서가 중요하고 중복이 가능한 데이터는 List가 잘 맞습니다.

List<String> fruits = new ArrayList<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("apple");

System.out.println(fruits); // [apple, banana, apple]

위 코드처럼 apple이 두 번 들어가도 그대로 저장됩니다.

대표 구현체: ArrayList와 LinkedList

  • ArrayList: 조회가 많고 가장 일반적으로 많이 사용
  • LinkedList: 중간 삽입/삭제가 잦을 때 고려하지만, 실무에서는 ArrayList가 더 자주 선택됨
List를 쓰면 좋은 경우
  • 데이터 입력 순서를 유지해야 할 때
  • 인덱스로 특정 위치에 접근해야 할 때
  • 같은 값이 여러 번 들어가도 괜찮을 때
Set이란? 중복 없는 데이터 집합
값이 이미 있는지 확인하거나, 중복 제거할 때 자주 씁니다.

Set은 중복된 값을 허용하지 않습니다. 순서보다 "같은 값이 있느냐 없느냐"가 더 중요한 구조입니다.

Set<String> fruits = new HashSet<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("apple");

System.out.println(fruits); // [banana, apple]

여기서는 apple을 두 번 넣어도 한 번만 저장됩니다.

이런 경우에 많이 씁니다.

  • 중복 회원 ID 제거
  • 태그 목록 중복 제거
  • 특정 값 포함 여부 확인

대표 구현체: HashSet과 TreeSet

  • HashSet: 가장 일반적이고 빠르게 많이 사용
  • TreeSet: 정렬된 상태가 필요할 때 사용
Set은 "목록 저장"보다 "중복 제거"와 "존재 여부 확인"에 더 잘 어울립니다.
Map이란? key로 value를 찾는 구조
이름표로 값을 찾는 느낌이라 조회 중심 로직에서 자주 등장합니다.

Mapkeyvalue를 한 쌍으로 저장합니다. List, Set과 가장 큰 차이는 값 자체를 순서대로 다루는 것보다, key를 통해 value를 찾는 구조라는 점입니다.

Map<String, Integer> scores = new HashMap<>();
scores.put("Kim", 90);
scores.put("Lee", 85);
scores.put("Park", 95);

System.out.println(scores.get("Kim")); // 90

예를 들어,

  • 회원 ID → 회원 정보
  • 상품 코드 → 상품 가격
  • 설정 이름 → 설정 값

처럼 이름이나 키로 바로 찾아야 하는 경우 Map이 아주 자주 쓰입니다.

대표 구현체: HashMap, LinkedHashMap, TreeMap

  • HashMap: 가장 일반적으로 많이 사용
  • LinkedHashMap: 입력 순서를 유지하고 싶을 때
  • TreeMap: key 기준 정렬이 필요할 때
구현체 특징 언제 많이 쓰나
HashMap 순서 보장 없음, 빠른 조회 가장 기본 선택
LinkedHashMap 입력 순서 유지 순서 있는 key-value 출력
TreeMap key 정렬 유지 정렬된 결과가 필요할 때
List, Set, Map 차이 한 번에 정리
실전에서는 이 비교표를 기준으로 선택하면 훨씬 편합니다.
항목 List Set Map
순서 있음 구현체에 따라 다름 구현체에 따라 다름
중복 값 허용 불가 key 중복 불가
조회 방식 인덱스 값 존재 여부 key로 value 조회
대표 용도 목록 처리 중복 제거 매핑, 캐시, 설정값 관리
선택 기준 체크리스트
  • 순서가 중요하면 List
  • 중복 제거가 중요하면 Set
  • 이름이나 key로 빠르게 찾고 싶으면 Map
  • 일단 잘 모르겠으면 목록 저장은 보통 ArrayList부터 시작
  • key-value 구조가 보이면 거의 HashMap 후보
실무에서 자주 막히는 포인트
문법보다 개념을 헷갈려서 잘못 선택하는 경우가 많습니다.

1. Map도 Collection이라고 착각하는 경우

많이 헷갈리지만 MapCollection 계열이 아닙니다. 그래서 Collection 메서드와 완전히 같은 식으로 생각하면 안 됩니다.

2. 중복 제거가 필요한데 List를 계속 쓰는 경우

중복 제거가 핵심인데 List에 넣고 나중에 직접 검사하면 코드가 지저분해집니다. 이럴 때는 처음부터 Set을 고려하는 게 더 자연스럽습니다.

3. key-value 구조인데 List로 억지로 관리하는 경우

예를 들어 사용자 ID로 사용자 정보를 찾는 상황이면 List<User>를 순회하는 것보다 Map<String, User>가 더 잘 맞을 수 있습니다.

4. ArrayList와 LinkedList를 과하게 성능 비교하는 경우

입문 단계에서는 이론 성능표에 너무 매달리기보다, 대부분의 일반적인 상황에서 ArrayList가 기본 선택이라는 감각을 먼저 가져가는 편이 좋습니다.

초보자가 꼭 체크할 포인트
  • `List`는 순서 O, 중복 O
  • `Set`은 순서보다 중복 제거가 핵심
  • `Map`은 key-value 구조이며 key 중복 불가
  • `ArrayList`, `HashSet`, `HashMap`이 가장 먼저 익혀야 할 대표 구현체
  • 문법보다 데이터 성격을 보고 고르는 습관이 더 중요
FAQ
  • Q. List, Set, Map 중 가장 먼저 공부할 것은 무엇인가요?
    → 보통은 `List`부터 시작하고, 그다음 `Set`, `Map` 순서로 익히면 이해가 쉽습니다. 다만 실제로는 세 가지를 함께 비교하면서 보는 편이 더 효율적입니다.
  • Q. ArrayList와 LinkedList 중 무엇을 먼저 익혀야 하나요?
    → 대부분은 `ArrayList`부터 익히면 됩니다. 일반적인 목록 처리에서는 `ArrayList`가 가장 자주 쓰입니다.
  • Q. HashSet은 순서가 있나요?
    → 일반적으로 입력 순서를 보장하지 않습니다. 순서가 필요하면 `LinkedHashSet` 같은 다른 구현체를 고려해야 합니다.
  • Q. Map도 for-each로 돌릴 수 있나요?
    → 가능합니다. 다만 `Map` 자체를 직접 도는 게 아니라 `keySet()`, `values()`, `entrySet()` 같은 형태로 순회하는 경우가 많습니다.
결론
컬렉션 프레임워크는 외우는 과목이 아니라, 데이터 성격에 따라 선택하는 도구입니다.

자바 컬렉션 프레임워크를 이해할 때 가장 중요한 건 클래스 이름을 많이 외우는 것이 아닙니다.

  • 순서가 중요하면 List
  • 중복 제거가 중요하면 Set
  • key-value 조회가 필요하면 Map

이 기준만 확실히 잡아도 대부분의 입문 문제는 훨씬 쉽게 풀립니다.

그리고 실제 코드에서는 ArrayList, HashSet, HashMap 세 가지가 가장 자주 등장하므로, 먼저 이 세 가지를 중심으로 감을 잡는 것이 좋습니다.

자바 컬렉션 프레임워크는 "무엇이 더 어렵냐"보다 "내 데이터에 어떤 구조가 맞느냐"로 접근할 때 가장 빨리 이해됩니다.

※ 이 글은 자바 컬렉션 프레임워크 입문자를 위한 구조 이해 중심 가이드입니다. 다음 단계에서는 `ArrayList`, `HashMap`, `Set 중복 제거`, `equals()/hashCode()`와의 관계까지 이어서 보면 이해가 더 단단해집니다.

728x90
댓글
반응형
최근에 올라온 글
글 보관함
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30