"데이터(객체)를 효율적으로 저장하고 관리하기 위한 자료 구조 클래스들의 집합"
Java에서 Collection은 인터페이스이며, 주요 하위 인터페이스와 구현 클래스는 다음과 같습니다:
| 인터페이스 | 설명 | 대표 구현 클래스 |
|---|---|---|
List | 순서 있고, 중복 허용 | ArrayList, LinkedList |
Set | 순서 없음, 중복 불가 | HashSet, TreeSet |
Queue | FIFO 구조의 처리 | LinkedList, PriorityQueue |
Map | 키-값 쌍 저장 (※ Collection 아님) | HashMap, TreeMap |
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
System.out.println(list); // [apple, banana]
"클래스나 메서드에서 사용할 데이터 타입을 코드 작성 시가 아니라 사용할 때 지정하는 기법"
즉, 다양한 타입에 대해 타입 안정성(safety)을 보장하며 재사용 가능한 코드 작성이 가능해져요.
List<String> list = new ArrayList<>();
list.add("hello");
// list.add(123); // 컴파일 에러 발생 (타입 안전성)
String s = list.get(0); // 형변환 불필요
제네릭은 Collection에서 가장 많이 사용됩니다.
List list = new ArrayList();
list.add("text");
list.add(123); // 다른 타입도 들어갈 수 있음
String s = (String) list.get(0); // 형변환 필요
List<String> list = new ArrayList<>();
list.add("text");
// list.add(123); // 컴파일 에러
String s = list.get(0); // 형변환 X
import java.util.*;
public class Example {
public static void main(String[] args) {
List<Integer> nums = new ArrayList<>();
nums.add(10);
nums.add(20);
for (Integer num : nums) {
System.out.println(num * 2); // 타입 안정성 보장
}
}
}
| 개념 | 설명 |
|---|---|
| Collection | 데이터를 저장/관리하는 자료구조 (List, Set, Map 등) |
| Generic | 클래스/메서드의 타입을 매개변수로 일반화해서 코드 재사용 및 타입 안전성 보장 |
| 둘의 관계 | 대부분의 Collection 클래스는 Generic을 함께 사용함 (List<String>처럼) |