자바의 정석 - 제너릭 3

송용준·2023년 5월 10일

제한된 제너릭 클래스

  • extends로 대입할 수 있는 타입을 제한
class FruitBox<T extends Fruit> {
	ArrayList<T> list = new ArrayList<T>();
    ...
}

FruitBox<Apple> appleBox = new FruitBox<Apple>(); 	// ok
FruitBox<Toy> toyBox = new FruitBox<Toy>();		// 에러. Toy는 Fruit의 자손이 아님
  • 인터페이스인 경우에도 extends를 사용

제너릭의 제약

  • 타입 변수에 대입은 인스턴스 별로 다르게 가능
Box<Apple> appleBox = new Box<Apple>();
Box<Grape> appleBox = new Box<Grape>();
  • static멤버에 타입 변수 사용 불가
class Box<T> {
	static T item;		// 에러
    static int compare(T t1, T t2) { ... }	// 에러
}

이유 : static은 모든 인스턴스에 공통으로 쓰기 때문에

  • 배열 샌성할 때 타입 변수 사용불가. 타입 변수로 배열 선언은 가능
class Box<T> {
	T[] itemArr;	// ok. T타입의 배열을 위한 참조변수
	T[] toArray() {
    	T[] tmpArr = new T[itemArr.length];	// 에러. 제너릭 배열 생성 불가
    }
}

객체생성, 배열생성할때 new T 이런식으로 못씀. 객체생성시 타입이 확정되어 있어야함

profile
용용

0개의 댓글