



- 컴파일시 타입을 체크 해주는 기능
- 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌
- 안정성
- 타입체크와 형변환을 생략할 수 있으므로 코드 간결
- 클래스를 작성할 때, Object타입 대신 T와 같은 타입 변수를 사용
class Box{ Object item; void setItem(Object item) { this.item = item; } Object getItem() {return item;} } class Box<T>{ T item; void setItem(t item) { this.item = item;} T getItem() {return item;} }
- 참조변수, 생성자에 T대신 실제 타입을 지정하면 형변환 생략 가능
- Box< String > b = new Box< String >();
- Box< T > : 제네릭 클래스 'T의 box' 또는 'T box'라고 읽는다.
- T : 타입 변수 또는 타입 매개변수
- Box : 원시 타입, raw Type
class Box< T >
- static을 허용하지 않습니다.
- 제네릭 클래스 Box< T >의 선언 (위 참조)
- Box< T >의 객체 생성. 참조 변수와 생성자에 대입된 타입이 일치
- Box< Apple > appleBox = new Box< Apple >()
- Box< Apple > appleBox = new Box< Grape >() //에러
- 두 제네릭 클래스가 상속관계이고, 대입된 타입이 일치 는 허용
- Box< Apple > appleBox = new FruitBox< Apple >();
- Box< Apple > appleBox = new Box<>() // 생략가능 jdk 1.7부터
- ㅁㄴㅇ
- Box< Apple > appleBox = new Box< Apple >();
- appleBox.add(new Grape()) // 타입에러 컴파일 에러
- 제너릭 타입에 와일드 카드를 쓰면, 여러 타입을 대입 가능
- 단, 와일드 카드에는 <? extends T & E> & 쓰는 건 불가
` < ? extends T