- 클래스나 메소드에서 컴파일할때 타입체크(type check)를 하는 기능이다.
- 미리 객체(인스턴스)의 공통적인 타입을 명시해서 처리하기 때문에 안정성이 높고, 캐스팅(형변환)을 생략할 수 있다.
- 제네릭 클래스와 제네릭 메소드이 구현이 가능하다.
- 모든 컬렉션 프레임 워크는 제네릭 처리가 되어있어 제네릭을 반드시 알아야 한다.
- 2개 이상의 제네릭 타입 선언이 가능하다.
- 제네릭 타입의 구체화는 reference type만 가능핟. (primitive type은 불가능하다.)
- 주의사항
1) T obj = new T(); 불가능(제네릭 타입의 객체 생성은 불가능하다)
2) T[] arr = new T[3]; 불가능(제네릭 타입이 배열 생성은 불가능하다.)
3) T[] arr;
class Box {
private T obj;
public void setObj(T obj){
this.obj =obj;
}
}
//main
Box box = new Box<>();//구체화
Box box = new Box();//구체화는 reference type만 허용
//컴파일 시점
T타입이 String으로 대체된다.
class Box {
private String obj;
public void setObj(String obj){
this.obj=obj;
}
public String getObj(){
return obj;
}
}