[Java] 36. 컬렉션 프레임워크란?
배열만으로 데이터를 관리하기엔 부족하다면?
자바는 이를 위해 강력한 컬렉션 프레임워크(Collection Framework) 를 제공합니다.
컬렉션 프레임워크란?
✅ 여러 데이터를 쉽게 저장하고 꺼낼 수 있도록 만든 자바의 도구 모음입니다.
쉽게 말하면, 자료 보관함이에요!
- 순서를 유지하는 리스트형 보관함
- 중복을 허용하지 않는 집합형 보관함
- 이름표 붙여서 찾는 사전형 보관함
➡ 자바는 List, Set, Map 등 다양한 인터페이스와 그 구현체를 통해
중복 제거, 정렬, 키-값 저장, 순서 유지 같은 다양한 요구를 충족시켜줍니다.
왜 배열이 아닌 컬렉션을 써야 할까요?
프로그래밍을 하다 보면,
학생 명단, 상품 목록, 게시글 리스트처럼 여러 개의 데이터를 한꺼번에 저장해야 할 일이 정말 많아요.
그럴 땐 가장 먼저 생각나는 게 배열(Array) 입니다.
String[] students = {"철수", "영희", "민수"};
하지만 배열에는 이런 불편한 점들이 있습니다.
- ❌ 한 번 크기를 정하면 변경할 수 없음
- ❌ 중간에 데이터를 추가/삭제하기 불편
- ❌ 중복 제거 기능 없음
- ❌ 키-값 구조 저장 불가능
그래서 자바는 배열의 한계를 보완한 도구,
바로 컬렉션 프레임워크(Collection Framework) 를 제공합니다!
항목 | 배열 | 컬렉션 |
크기 변경 | 불가능 | 가능 (자동 확장) |
삽입/삭제 | 느림 | 빠름 (특히 LinkedList, HashSet 등) |
중복 제거 | 직접 구현 필요 | Set으로 자동 처리 |
키-값 구조 | 불가능 | Map으로 사용 가능 |
종류
자바 컬렉션은 3가지 핵심 구조로 분류됩니다
1️⃣ List (리스트)
순서가 있고, 중복을 허용해요.
예시 : ArrayList, LinkedList, Vector
👉 학생 출석부처럼 순서대로 쭉 저장하는 느낌이에요
2️⃣ Set (셋)
순서가 없고, 중복 허용을 안해요.
예시 : HashSet, LinkedHashSet, TreeSet
👉 주민등록번호 목록이나 학생 번호 목록처럼 한 번만 기록되는 구조예요
3️⃣ Map (맵)
"이름표(Key)"와 "값(Value)" 쌍으로 저장해요. 키는 중복 불가해요!
예시 : HashMap, LinkedHashMap, TreeMap, Hashtable
👉 전화번호부처럼 이름과 전화번호를 저장하는 구조에요
“철수” → “010-1234-5678”
“영희” → “010-2222-3333”
반복자(Iterator)란?
✅ 반복자는 컬렉션을 순회할 때 사용하는 핵심 도구입니다.
컬렉션은 단순히 저장만 하는 게 아니라
데이터를 반복적으로 꺼낼 수 있는 도구도 제공하죠
자바에서 가장 익숙한 반복 방법은 for-each 문입니다.
for (String name : nameList) {
System.out.println(name);
}
이 for-each 문도 내부적으로는 Iterator를 사용해요.
즉, Iterator는 컬렉션을 하나씩 순서대로 꺼내는 기본 도구입니다.
자바에서는 다음과 같은 반복자들이 있습니다.
- Iterator – 가장 기본적인 반복자
- ListIterator – 앞뒤로 이동 가능 (List 전용)
- Enumeration – 예전 버전의 반복자 (거의 사용 안 함)
Iterator<String> it = nameList.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
for-each 문은 간단하고 직관적이지만,
Iterator는 반복 도중 요소를 삭제하거나 세밀하게 제어할 수 있어요.
Arrays 클래스 & Collections 클래스
컬렉션 프레임워크와 함께 자주 쓰이는 도우미 클래스들도 존재합니다.
- Arrays 클래스
➡ 배열 관련 편리한 기능 모음 (정렬, 검색, 복사 등) - Collections 클래스
➡ 컬렉션 관련 꿀기능 모음 (최대값 찾기, 리스트 뒤집기, 정렬 등)
요약 정리
- 자바 컬렉션 프레임워크는 다양한 자료구조(List, Set, Map)를 제공해
데이터를 효율적으로 저장, 검색, 수정할 수 있게 해줍니다. - 데이터를 넣고, 꺼내고, 정리하고, 반복하기가 훨씬 쉬워집니다.
- 배열보다 유연하고 강력하며, 대부분의 실무에서 필수적으로 사용됩니다.
읽어주셔서 감사합니다 😊