반응형

제한된 지네릭 클래스

  • extends로 대입할 수 있는 타입을 제한

타입 변수에 대입할 수 있는 타입을 제한 시킬 수 있는데,
extends를 이용하여 지정한 것의 자손만 타입으로 지정가능하도록 만들 수 있다.

위의 코드는, Fruit의 자손인 타입만 타입변수로 대입할 수 있도록 제한 한 것이다.

그러면, Apple이 Fruit의 자손이라고 했을 때,
대입된 타입 T는 Fruit의 자손이어야하므로, Apple을 대입할 수 있다.

그런데, Toy는 Fruit의 자손이 아니므로 에러가 발생한다.

 

  • 인터페이스인 경우에도 extends를 사용

인터페이스를 구현한 경우로 제한할 때도, extends를 쓴다. implements가 아니라 extends를 사용하는 것에 주의하자.

 

[Ex12_3]

 


 

지네릭스의 제약

 

  • 타입 변수에 대입은 인스턴스 별로 다르게 가능

class Box<T> {} 에서 T는 인스턴스마다 다르게 대입할 수 있다.
즉, 인스턴스를 생성할 때마다 타입 변수를 다르게 지정할 수 있다.

 

  • static멤버에 타입 변수 사용 불가

static멤버에는 타입 변수를 사용할 수 없다. 사용하면 에러가 난다.
왜냐하면,타입 변수는 인스턴스마다 다르게 지정할 수 있는데,
static 멤버는 모든 인스턴스에 공통으로 적용되는 멤버기 때문이다.

 

  • 객체/배열 생성할 때 타입 변수 사용불가. 타입 변수로 객체/배열 선언은 가능

배열을 생성할 때 타입 변수를 사용할 수 없다.
타입 변수로 배열을 선언하는 것은 가능하다.

<T>가 있을 때 new T처럼 new 다음에 타입변수가 오면 안된다.

객체 생성이나, 배열을 생성할 때 둘다 안된다.

new 연산자는 뒤에 타입이 확정되어 있어야한다. 그런데<T>는 아직 어떤 타입이 올지 모르기 때문에 안된다.

 

반응형