본문 바로가기
프로그래밍/자바[JAVA]

17장. 컬렉션 프레임워크 한방에 정리 - List, Set, Map 완전 이해

by 사업가 Jay 2025. 5. 16.

17장. 컬렉션 프레임워크 한방에 정리 - List, Set, Map 완전 이해

자바에서 데이터를 다루려면 꼭 알아야 할 필수 개념! List, Set, Map, 이번 기회에 명확히 구분하고 확실히 잡아봅시다.

안녕하세요! 오늘은 자바에서 정말 자주 쓰이지만 헷갈리기 쉬운 '컬렉션 프레임워크'에 대해 이야기해볼게요. 솔직히 List랑 Set 차이, Map은 왜 또 다른지… 저도 처음엔 무조건 ArrayList부터 쓰고 봤거든요. 그런데 실무에서 다양한 상황을 겪다 보니 각각의 특징과 사용법을 제대로 아는 게 얼마나 중요한지 뼈저리게 느꼈어요. 이번 17장에서는 자바의 대표 컬렉션들인 List, Set, Map의 개념과 차이점, 사용 예시까지 깔끔하게 정리해드릴게요. 이제는 상황에 맞게 똑똑하게 선택하세요!

컬렉션 프레임워크란?

컬렉션 프레임워크는 자바에서 데이터를 효율적으로 저장하고 관리하기 위한 자료구조 모음이에요. 배열과는 달리 동적으로 크기를 조절할 수 있고, 각 컬렉션은 특정 목적에 맞게 설계되어 있어요. List, Set, Map이 대표적인 세 가지 인터페이스고, 각각 ArrayList, HashSet, HashMap 등 다양한 구현체가 있어요. "어떤 데이터를 어떻게 다룰 것인가"에 따라 적절한 컬렉션을 선택하는 게 중요하죠.

List의 특징과 사용법

구현 클래스 특징
ArrayList 배열 기반, 검색 속도 빠름, 추가/삭제 느림
LinkedList 노드 연결 기반, 추가/삭제 빠름, 검색 느림

List는 순서를 보장하고, 중복을 허용해요. 그래서 "학생 명단", "할 일 목록"처럼 순서가 중요하고 중복도 가능한 경우에 적합하죠.


List names = new ArrayList<>();
names.add("철수");
names.add("영희");
names.add("철수"); // 중복 허용
System.out.println(names); // [철수, 영희, 철수]

Set의 특징과 사용법

  • HashSet: 순서 없음, 중복 불가, 가장 빠름
  • LinkedHashSet: 입력 순서 유지, 중복 불가
  • TreeSet: 정렬된 상태 유지, 중복 불가

Set은 순서가 없고, 중복을 허용하지 않아요. 중복을 제거하거나 유일한 값만 저장하고 싶을 때 사용하죠.


Set fruits = new HashSet<>();
fruits.add("사과");
fruits.add("바나나");
fruits.add("사과"); // 중복 제거됨
System.out.println(fruits); // [사과, 바나나]

Map의 특징과 사용법

Map은 키(key)와 값(value)을 쌍으로 저장하는 자료구조예요. 키는 중복될 수 없고, 값은 중복 가능해요. 대표적으로 HashMap, LinkedHashMap, TreeMap 등이 있고, 각각 정렬 여부와 순서 보장에 차이가 있어요. 예를 들어 사용자 정보, 설정값 저장 등에 자주 쓰여요.


Map scores = new HashMap<>();
scores.put("철수", 90);
scores.put("영희", 95);
scores.put("철수", 100); // 키 중복 → 값 갱신됨
System.out.println(scores); // {철수=100, 영희=95}

List, Set, Map 비교표

컬렉션 순서 유지 중복 허용 접근 방식
List O O 인덱스 기반
Set X (단, LinkedHashSet은 O) X 이터레이터
Map X (단, LinkedHashMap은 O) 키: X, 값: O 키 기반

컬렉션 사용 시 흔한 실수들

  • Set에 중복 값이 저장될 거라 착각하기
  • Map에 null 키를 여러 번 넣으려 하기 (HashMap은 하나만 허용)
  • 순서가 중요한데 Set을 사용해서 순서가 섞이는 문제 발생
Q List와 ArrayList는 다른가요?

List는 인터페이스고, ArrayList는 그 구현 클래스예요. 일반적으로 List 타입으로 선언하고 ArrayList로 생성해 사용해요.

Q Set은 왜 중복을 허용하지 않나요?

Set의 목적 자체가 중복 없는 유일한 값을 저장하는 것이기 때문이에요. 내부적으로 hash 값을 이용해 중복을 판단해요.

Q HashMap은 순서를 보장하나요?

아니요. 입력한 순서를 보장하지 않아요. 순서가 중요하면 LinkedHashMap을 사용하세요.

Q List와 Set 중 언제 무엇을 선택해야 하나요?

순서와 중복이 필요하면 List, 중복 없이 유일한 값만 저장하고 싶다면 Set을 사용하세요.

Q Map에서 키와 값은 어떤 타입도 가능한가요?

네, 제네릭 타입을 사용해 어떤 객체든 키나 값으로 사용할 수 있어요. 다만 키는 hashCode와 equals를 잘 구현해야 해요.

Q TreeMap과 TreeSet은 언제 쓰나요?

항목들을 정렬 상태로 유지해야 할 때 사용합니다. 예를 들어 사전순 정렬이나 숫자 순서가 중요할 때 좋습니다.

컬렉션 프레임워크는 자바 개발자라면 반드시 숙지해야 할 핵심 개념이에요. List, Set, Map은 단순한 자료구조가 아니라, 우리가 데이터를 어떤 관점으로 다루고 싶은지를 결정하는 도구거든요. 저도 처음에는 "그냥 배열 쓰면 되는 거 아냐?"라는 생각으로 접근했지만, 프로젝트를 하면서 각 컬렉션의 쓰임새를 깨닫고 나선 완전히 시야가 달라졌어요. 여러분도 꼭 직접 사용해보면서 몸으로 익혀보시길 바라요. 이해가 안 되는 부분은 언제든 댓글로 남겨주세요. 같이 배워요!

컬렉션프레임워크, 자바리스트, 해시셋, 맵사용법, ListSetMap비교, 자바기초, 자료구조, 컬렉션종류, Java17장, 자바개발자팁