자바 배열이나 리스트에 다양한 타입의 데이터를 마구잡이로 넣다 보면, 나중에 꺼내 쓸 때 어떤 타입인지 몰라 런타임 에러가 발생하기 쉽습니다. 이를 방지하기 위해 제네릭(Generics) <T>을 사용합니다.
제네릭은 클래스나 메서드를 정의할 때 데이터의 타입을 미리 픽스하지 않고, 실제로 객체를 생성하는 시점에 타입을 꽂아주는(결정하는) 기법입니다. 덕분에 컴파일러가 강력한 타입 체크를 해주고, 형변환(Casting) 코드도 생략할 수 있어 코드가 훨씬 안전하고 깔끔해집니다.
Box<T>는 구멍이 뚫려있는 빈 이름표를 단 '만능 택배 상자'입니다.
개발자가 이 상자를 쓸 때 Box<String>이라고 선언하면, 이름표에 '문자열 전용'이라고 도장이 찍히며 오직 글자만 넣을 수 있는 상자로 변신합니다. Box<Integer>라고 선언하면 '숫자 전용' 상자로 변신하죠. 하나의 설계도로 여러 타입 전용 상자를 무한정 만들어낼 수 있습니다!
| 알파벳 | 의미 (Full Name) | 주요 사용처 |
|---|---|---|
| T | Type | 가장 일반적인 타입 (예: Box<T>) |
| E | Element | 컬렉션에 들어가는 요소 (예: List<E>) |
| K | Key | Map의 키 (예: Map<K, V>) |
| V | Value | Map의 값 또는 리턴 값 |