☕ 자바 제네릭(Generics) 개념 & 문법 정복하기
클래스와 인터페이스 선언에 타입 매개변수가 쓰이면 이를 제네릭 클래스 / 인터페이스라 한다.
제네릭 클래스/인터페이스를 통틀어 제네릭 타입이라 한다.
클래스나 메소드에서 사용될 데이터 타입을 필요에 의해 지정할 수 있도록 하는 일반 타입이다.
→ 컴파일 단계에서 타입이 잘못 지정될 위험 방지, 타입변환/타입검사 생략 가능
ArrayList<String> list = new ArrayList<String>();
List<T> l = new ArrayList<>();
//<> 다이아몬드 연산자 부분이 제네릭
타입 매개 변수로 사용하는 문자는 관례적으로 하나의 대문자를 사용한다.
T | Type |
---|---|
E | Element (List) |
K | Key (Map<K,V>) |
V | Value |
N | Number |
S,U,V | 2,3,4번째에 선언된 타입 |
제네릭에서 할당 받을 수 있는 타입은 Reference 타입 뿐이다.
→ 기본형은 Wrapper 클래스 사용해야 함
//2. 할당된 타입으로 모두 변환되어 클래스 타입이 지정됨
class Info<T>{
List<T> infos = new ArrayList<>();
public void add(T info) {
infos.add(info);
}
}
public static void main(String[] args) {
//1. 제네릭 타입 매개변수에 String 타입 할당
Info<String> infos = new Info<>(); //1.7 이후부터 생성자에서는 타입을 지정해줄 필요 없음 (생략 가능)
Info<Integer> intInfos = new Info<>();
infos.add("add info");
intInfos.add(1);
}