자바 컬렉션 프레임워크(Java Collection Framework)는 객체들을 효율적으로 저장하고 조작하기 위한 핵심 도구입니다. 이 프레임워크에는 다양한 래퍼 클래스, 편의 클래스, Vector나 Hashtable 같은 레거시 구현체, 그리고 여러 컬렉션 인터페이스들이 포함되어 있습니다.
Collection이란?
Collection은 자바 컬렉션 프레임워크의 최상위 인터페이스입니다. 크게 두 가지 계열로 나눌 수 있습니다.
- java.util.Collection — Set, Queue, List 등의 하위 인터페이스를 포함합니다.
- java.util.Map — Map, SortedMap 등을 포함합니다. Map은 엄밀히 말해 Collection을 상속하지는 않지만, 컬렉션 프레임워크의 일부로 분류됩니다.
Collections란?
반면 Collections는 이름은 비슷하지만 성격이 완전히 다른 유틸리티 클래스입니다. 개발자에게 편의 메서드를 제공하는 것이 주된 목적이며, 이 클래스의 모든 메서드는 static으로 선언되어 있어 객체 생성 없이 바로 호출할 수 있습니다. 대표적인 기능으로는 컬렉션 정렬(sort), 요소 뒤집기(reverse), 이진 탐색(binarySearch), 그리고 스레드 안전한 동기화 컬렉션(synchronized collection) 반환 등이 있습니다.
단, 이 클래스의 메서드에 null인 컬렉션이나 클래스 객체가 전달되면 NullPointerException이 발생하므로 주의해야 합니다.
Collection vs Collections 비교표
| 번호 | 구분 기준 | Collection | Collections |
|---|---|---|---|
| 1 | 기본 개념 | 자바 컬렉션 프레임워크의 인터페이스입니다. | 컬렉션 프레임워크의 유틸리티 클래스입니다. |
| 2 | 정적 메서드 | 모든 메서드가 static인 것은 아닙니다. | 모든 메서드가 static으로 선언되어 있습니다. |
| 3 | 주요 용도 | 여러 객체를 하나의 단일 객체에 저장하는 데 사용됩니다. | 컬렉션 객체를 조작(정렬, 검색, 동기화 등)하는 데 사용됩니다. |
예제 코드: Collection과 Collections 함께 사용하기
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
// List 생성
List list = new ArrayList();
list.add("HCL");
list.add("DELL");
// 자연 순서(natural ordering)에 따라 오름차순 정렬
Collections.sort(list);
list.forEach(System.out::println);
}
}
위 예제에서는 ArrayList로 List 객체를 생성한 뒤, 유틸리티 클래스인 Collections의 sort() 메서드를 사용해 요소를 오름차순으로 정렬했습니다. 실행 결과는 "DELL", "HCL" 순서로 출력됩니다. 이처럼 Collection이 데이터를 담는 그릇이라면, Collections는 그 그릇을 다루는 도구 모음이라고 이해하면 됩니다.