CODEDRAGON ㆍDevelopment/Java
제네릭 제한
· extends 예약어로 제네릭으로 올 수 있는 데이터 타입을 특정 클래스의 자식으로 제한할 수 있습니다.
· extends를 통해 부모클래스가 무엇인지 지정하여 제네릭에 올수 있는 타입을 지정(제한)하게 됩니다.
· extends는 상속(extends)뿐 아니라 구현(implements)의 관계에서도 사용할 수 있습니다.
제네릭의 제한(class) 형식
extends 키워드를 사용하면 타입 변수(type variable)에 특정 타입만을 사용하도록 제한할 수 있습니다.
class Person<T extends Info>{ }
|
T가 Info를 상속(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>{ }
|
'Development > Java' 카테고리의 다른 글
List 인터페이스, List의 구현 클래스, List<E> 인터페이스를 구현 클래스의 인스턴스 저장 특징 (0) | 2017.10.12 |
---|---|
Collection Interface, Collection Interface 주요 메소드 (0) | 2017.10.12 |
Generics(일반화) - 일반화(Generalization), 일반화 프로그래밍(Generic Programming), 제네릭의 필요성, 제네릭화의 이점 (0) | 2017.10.11 |
finally의 필요성, finally 구성 형식, finally안에서의 예외, finally 블럭 (0) | 2017.10.11 |
throw 예외의 인위적인 발생, 예외를 강제로 발생 활용, throws 예외처리시 이점 (0) | 2017.10.11 |