프로그램은 결국 데이터를 다루는 것입니다. 쇼핑몰의 상품
목록이든, 연락처 목록이든, 모든 정보는 체계적으로 저장되고 관리되어야
합니다.
자바(Java)에서는 이러한 데이터를 효율적으로 '수집(Collection)'하고
'관리'할 수 있도록 돕는
컬렉션 프레임워크(Collection Framework)를 제공합니다.
이 프레임워크의 세 가지 핵심 기둥인 List, Set, Map은
개발자가 데이터를 다룰 때 어떤 상황에서 어떤 구조를 사용해야 할지 결정하는
기준이 됩니다.
본 글에서는 이 세 가지의 개념과 명확한 차이점을 일반인도 쉽게 이해할 수
있도록 명쾌하게 설명합니다.
🌱 컬렉션 프레임워크란 무엇인가?
컬렉션(Collection)은 말 그대로 '데이터를 모아둔
것'입니다.
자바 컬렉션 프레임워크는 데이터를 저장하고 처리하는 데 필요한
인터페이스(규칙)와 구현 클래스(실제 구조)의 집합입니다.
기존 배열(Array)의 한계(크기가 고정됨)를 극복하고, 데이터를 유연하게 추가,
삭제, 검색할 수 있도록 설계되었습니다.
💡 핵심 계층 구조
컬렉션 프레임워크는 크게 Collection 인터페이스와
Map 인터페이스를 최상위로 가집니다.
우리가 주로 사용하는 List와 Set은
Collection 인터페이스를 상속받으며,
Map은 독립적인 구조를 가집니다.
🔑 List, Set, Map: 3대 핵심 인터페이스 비교
세 가지 인터페이스는 데이터를 저장하는 방식과 규칙에 따라 명확히
구분됩니다.
어떤 데이터를, 어떻게 저장하고 싶으냐에 따라 적절한 컬렉션을 선택해야
합니다.
1. 📖 List (목록): 순서가 있는 데이터 모음
List는 순서가 있는(Ordered) 데이터의 목록을 저장합니다.
우리가 흔히 생각하는 배열이나 메모와 가장 비슷합니다.
가장 큰 특징은 데이터의 중복 저장이 허용된다는
점입니다.
- ArrayList: 가장 흔하게 사용되며, 배열처럼 인덱스(순서 번호)를 통해 빠르게 접근 가능합니다.
- LinkedList: 데이터의 추가/삭제가 빈번할 때 효율적입니다.
2. 🧩 Set (집합): 중복을 허용하지 않는 데이터 모음
Set은 수학적인 집합 개념과 동일합니다. 데이터를 저장할 때
중복을 절대 허용하지 않습니다.
순서는 중요하지 않으며, 특정 요소가 해당 집합에 '존재하는지' 여부를 빠르게
확인하는 용도로 주로 사용됩니다.
- HashSet: 가장 빠른 성능을 제공하지만, 저장되는 순서가 보장되지 않습니다.
- TreeSet: 저장된 데이터를 자동으로 오름차순 정렬하여 저장합니다.
3. 🔑 Map (지도): 키(Key)와 값(Value)의 쌍
Map은 Collection 인터페이스를 상속받지 않는 독립적인 구조입니다. 데이터를
키(Key)와 값(Value)이 한 쌍으로 묶여 저장하는
방식입니다.
가장 중요한 특징은 키는 중복될 수 없지만, 값은 중복될 수
있다는 점입니다. 키를 통해 값을 빠르고 정확하게 찾아낼 수 있습니다.
- HashMap: 가장 일반적이고 빠른 Map 구현체로, 키-값 쌍을 저장합니다.
- LinkedHashMap: 키를 삽입한 순서대로 기억합니다.
| 구분 | 순서 유지 여부 | 중복 허용 여부 | 저장 방식 |
|---|---|---|---|
| List | O (인덱스 순서) | O (허용) | 값만 저장 |
| Set | X (대부분의 구현체) | X (불가) | 값만 저장 |
| Map | X (키-값 쌍) | 키는 불가, 값은 허용 | 키(Key)와 값(Value) 쌍 저장 |
🚀 컬렉션 프레임워크 최신 동향
컬렉션 프레임워크 자체의 구조는 크게 변하지 않았지만, 자바가 발전하면서
컬렉션을 사용하는 방식이 크게 진화했습니다.
1. Stream API의 등장과 데이터 처리 혁신
Java 8 이후 도입된 Stream API는 컬렉션 내의 데이터를
처리하는 방식을 혁신적으로 바꿨습니다.
List, Set, Map 등 모든 컬렉션은 `stream()` 메소드를 통해 스트림으로 변환될
수 있으며, 이를 통해 람다식(Lambda Expression)을 활용하여
데이터를 선언적으로, 대량으로 처리하고 필터링, 매핑,
정렬하는 작업이 매우 간결해졌습니다.
개발에서 데이터 처리 코드를 획기적으로 줄여주었기 때문에, 모든 컬렉션은
이제 Stream과 함께 사용되는 것이 기본 트렌드입니다.
2. 동시성(Concurrency) 컬렉션의 중요성 증대
멀티쓰레드 환경(여러 작업이 동시에 처리되는 환경)이 일반화되면서, 여러
곳에서 동시에 접근해도 안전한 컬렉션의 중요성이 커졌습니다.
기존의 `Vector`나 `Hashtable` 대신,
`ConcurrentHashMap`이나
`CopyOnWriteArrayList`와 같은
동시성 컬렉션(Concurrent Collections)의 사용이 권장되고
있습니다.
이러한 컬렉션들은 데이터의 안정성을 높이고 성능 저하를 최소화하도록
설계되었습니다.


.jpg)
.jpg)
댓글 쓰기