A collection is simply an object that groups multiple elements into a single unit. Collections are used to store, retrieve, manipulate, and communicate aggregate data.
— Collections Framework Overview, Java SE 8
Oracle JDK에서는 Collection에 대해서 데이터를 저장하고 조작하는 표준화된 방식을 제공하고 있다고 설명하고 있다.
Collection Framework를 제공함으로써 다음과 같은 이점을 가질 수 있다고 한다.
1. 프로그래밍 작업을 줄일 수 있다.
2. 성능을 향상시킨다.
3. 관련 없는 API간 상호운용성을 제공한다.
4. API 학습 비용을 줄인다.
5. 더 쉽게 API를 설계, 구현할 수 있게 도와준다.
6. 재사용성을 늘린다.
Collection Framework 에서 제공하는 Interface는
실제로 그런지 살펴보자
1. 프로그래밍 작업을 줄일 수 있다. - 배열내에서 사용할 만한 기능들을 이미 구현해두었기에 별도로 구현하지 않아도 된다.
String[] names = new String[10];
int size = 0;
void add(String name) {
names[size++] = name;
}
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
2. 성능을 향상시킨다.
- 상황에 따라서 적절한 구현체를 사용함으로써 성능향상이 가능하다.
ex: 중간의 원소를 수정할 일이 많은 경우 - LinkedList사용, 임의의 위치에 원소를 찾아야하는 경우가 많은 경우 - ArrayList사용
* 각 구현체에 따라 제공하는 성능이 달라 알맞게 사용하여 성능 향상이 가능하다.
3. 관련 없는 API간 상호운용성을 제공한다.
Set<String> keywordSet = new HashSet<>();
keywordSet.add("java");
keywordSet.add("collections");
List<String> keywords = new ArrayList<>(keywordSet); // 쉽게 변환 가능
someApi.acceptKeywords(keywords);
4. API 학습 비용을 줄인다.
- interface기반으로 구현되어있기에, 학습된 기능은 다른 구현체에서도 쉽게 익혀서 사용이 가능하다.
ex: contains method의 경우 List, Set 어디에서든 원소의 존재 여부를 확인하는 method이다.
5. 더 쉽게 API를 설계, 구현할 수 있게 도와준다. - interface형태이기 때문에 구현체에 신경쓰지 않고 유연한 설계 가능
public void printUsers(List<User> users) {
for (User user : users) {
System.out.println(user.getName());
}
}
6. 재사용성을 늘린다. - 이미 구현된 알고리즘이 많아 재사용하여 활용 가능하다.
List<Integer> scores = Arrays.asList(90, 70, 80, 100);
Collections.sort(scores); // 재사용 가능한 정렬 알고리즘
int idx = Collections.binarySearch(scores, 80); // 검색도 가능
Collections에서 제공하는 Interface

* Map은 Collection interface를 상속하지 않고 별도의 interface로 기능을 제공한다.
Map관련 자료: https://icedstone.tistory.com/14
List관련 자료: https://icedstone.tistory.com/15
'JAVA' 카테고리의 다른 글
| Java Collection - Map (3) | 2025.08.08 |
|---|---|
| Java IO vs NIO (0) | 2025.07.20 |
| interface vs abstract class (1) | 2025.07.05 |
| Blocking vs Non-Blocking, Synchronous vs Asynchronous (0) | 2025.04.21 |
| JVM 메모리 구조 (0) | 2025.04.19 |