프로그래밍/JAVA
[Java] 제네릭(Generic) 타입
하와이블루
2022. 8. 11. 23:08
728x90
제네릭은 클래스 구현할 당시 타입을 확정적으로 정하지 않고 변수의 모습으로 남겨놓는 것을 의미한다.
그리고 클래스 객체를 생성 시, 남겨놓은 타입을 기재하여 타입을 확정한다.
제네릭은 원래 최상위 타입인 Object 타입으로 객체를 받아 사용하였지만 대부분의 클래스와 메소드에서 반환 시 반환 타입을 원하는 타입으로 타입 변환을 해야 하는 번거로움이 있어 제네릭의 개념이 등장하였다.
// 타입을 변수 T로 비워놓은 제네릭 클래스의 모습
public class Hello<T> { // T : 타입
private T data;
public void set(T data) {
this.data = data;
}
public T get() {
return data;
}
}
// 객체 선언시 타입 설정
Hello<String> strHello = new Hello<String>();
Hello<Integer> intHello = new Hello<Integer>();
T를 타입 변수라고 하며, T에 명시될 타입은 기본 타입은 올 수 없고 래퍼 클래스만 사용이 가능하다.
와일드 카드(wild card)
와일드 카드는 제네릭에서 물음표( ? ) 기호를 사용하여 제네릭의 한정적 표현을 보완하고자 등장하였고 와일드 카드를 사용하면 모든 타입을 대신할 수 있는 타입을 지정할 수 있게 되었다.
<?> // 타입 변수에 모든 타입을 사용할 수 있음.
<? extends T> // T 타입과 T 타입을 상속받는 자손 클래스 타입만을 사용할 수 있음.
<? super T> // T 타입과 T 타입이 상속받은 조상 클래스 타입만을 사용할 수 있음.
<? extends Number>의 의미는 Number의 자손 클래스까지 타입변수로 허용한다는 의미이다.
728x90