1. 배열의 한계와 컬렉션의 필요성

배열 : Java에서 가장 기본적인 자료구조. 간단하고 성능이 빠르지만, 실무에서는 다양한 이유로 배열만 사용하는 것에 부족함을 느낌
JCF(Java Collection Framework) : 배열의 단점을 보완하기 위해 등장한 것.
1 - 1) 배열의 한계
1) 고정 크기의 한계
- 배열은 한 번 크기를 지정하면 변경이 불가능하다.
- 배열의 크기가 부족하면 새로운 배열을 생성한 뒤 직접 복사해야 한다.
- 현실 세계의 데이터는 수시로 추가되거나 삭제되는 경우가 많다.
2) 타입 안정성 문제
- 배열은 기본형 배열 외에도 객체 배열 선언이 가능하다.
- 하지만 object[] 배열로 선언하면 모든 타입이 저장 가능해지며, 이 경우 런타임 타입 오류가 발생할 수 있다.
3) 편의 기능 부족
- 배열은 모든 로직을 직접 구현해야 하기 때문에 생산성과 유지보수성이 떨어진다.
- 다음과 같은 기능이 기본적으로 제공되지 않는다.
- 요소 추가 / 삭제
- 중간 삽입
- 정렬
- 중복 제거
- 검색 / 필터링
1 - 2) Java Collection Framework (JCF)로 극복 가능
1) 크기 조절이 가능한 자료구조
- ArrayList는 내부적으로 배열을 사용하지만, 자동으로 크기를 조절한다.
2) 타입 안정성 (제네릭)
- 컬렉션은 제네릭 문법을 통해 컴파일 타임에 타입을 검사한다.
3) 다양한 편의 기능 제공
- add(), remove(), contains(), size() 등 기본 메서드를 제공한다.
- sort(), distinct(), filter() 등 스트림과 함께 정렬/중복 제거도 가능하다.
- 다양한 자료 구조를 지원한다.
- List : 순서를 유지
- Set : 중복을 허용하지 않음
- Map : 키-값 형태로 저장
배열과 컬렉션 비교 정리
| 항목 | 배열 | 컬렉션 |
| 크기 | 고정 크기 | 동적 크기 조절 가능 |
| 타입 안전성 | 타입 섞일 수 있음 | 제네릭으로 안전하게 제한 |
| 요소 추가 / 삭제 | 복잡함 (직접 구현) | 메서드 제공 |
| 정렬 / 중복 제거 | 수동 구현 | 스트림과 함꼐 제공 |
| 사용 예 | 고정 크기, 성능 우선 | 실무 전반, 유동적 데이터 |
2. Java Collection Framework(JCF)
2 - 1) Collection(컬렉션)이란?
많은 데이터들을 효과적으로 처리할 수 있는 방법을 제공하는 클래스들의 집합. 이 컬렉션을 효과적으로 다루기 위한 도구 모음이 바로 컬렉션 프레임워크(Collection Framework) 이다.
그럼 프레임워크는 뭘까? 프레임워크는 자주 쓰는 기능을 미리 툴로 정의해둔 것으로, 컬렉션 프레임워크는 다양한 자료구조와 관련된 인터페이스, 구현 클래스, 알고리즘을 제공한다.
2 - 2) JCF를 사용하는 이유
- 일관된 API를 제공 : Collection 인터페이스를 기반으로 대부분의 컬렉션들이 동일한 메서드를 사용한다.
- 프로그래밍 생산성 향상 : 직접 자료구조를 구현할 필요 없이 미리 구현된 클래스를 사용하여 코드 작성 속도 증가.
- 높은 유지보수성과 품질 확보 : 표준화된 구조와 검증된 구현으로 안정적인 코드 작성이 가능하다.
2 - 3) JCF 구조와 Collection 인터페이스 계층


| 항목 | Collection | Map |
| 주요 인터페이스 | List, Set, Queue, Deque | Map |
| 데이터 구조 | 단일 값 집합 | 키-값 쌍 |
| 중복 허용 | List만 허용 | 키는 불가, 값은 허용 |
| 순서 보장 | List, 일부 Queue | LinkedHashMap만 순서 유지 |
| 주요 목적 | 값의 모음 | Key 기반 검색 |
2 - 4) 컬렉션 간 변환 관계
| 변환 방향 | 설명 |
| List → Set | 중복 제거 |
| Set → List | 순서 부여 |
| Set → Map | 요소를 키로, 값은 가공된 겨로가로 저장 |
| Map → Set | KeySet(), entrySet() 이용 |
| List → Map | 특정 기준을 key로 가공 |
'자바 고급(JAVA)' 카테고리의 다른 글
| Big O에 대한 이해 (0) | 2026.05.28 |
|---|---|
| JCF 주요 인터페이스 (0) | 2026.05.21 |
| 익명 클래스(Anonymous Class) (0) | 2026.05.18 |
| 내부 클래스(Inner Class) (0) | 2026.05.15 |
| SOLID 원칙 - DIP(Dependency Inversion Principle) (0) | 2026.05.15 |