제네릭 제한, 제네릭의 제한(class) 형식

CODEDRAGON Development/Java

반응형


 

제네릭 제한

·       extends 예약어로 제네릭으로 올 수 있는 데이터 타입을 특정 클래스의 자식으로 제한할 수 있습니다.

·       extends를 통해 부모클래스가 무엇인지 지정하여 제네릭에 올수 있는 타입을 지정(제한)하게 됩니다.

·       extends는 상속(extends)뿐 아니라 구현(implements)의 관계에서도 사용할 수 있습니다.

 

 

 

제네릭의 제한(class) 형식

 extends 키워드를 사용하면 타입 변수(type variable)에 특정 타입만을 사용하도록 제한할 수 있습니다.

class Person<T extends Info>{ }

 

TInfo를 상속(Info가 클래스인 경우) 또는 구현(Info가 인터페이스인 경우)하는 클래스의 자료형이 되어야 함을 명시하고 있습니다.

 

interface Property{

//...

}

 

abstract class Info{

//추상 메소드

public abstract int getInfo();

}

 

class EmployeeInfo extends Info{

public int position;

EmployeeInfo(int position){ this.position = position; }

//추상 메소드 구현

public int getInfo(){

return this.position;

}

}

//Person T Info 클래스나 자식 외에는 없습니다.

//extends 상속(extends) 아니라 구현(implements) 관계에서도 사용할 있습니다.

//Info클래스의 자식들 만이 T 있습니다.

class Person<T extends Info>{

public T info;

Person(T info){ this.info = info; }

}

 

 

클래스와 인터페이스를 동시에 상속받고 구현해야 한다면 엠퍼센트(&) 기호를 사용하면 됩니다.

class Person<T extends Info & Property>{ }