Java Generics
Last edited at 2025-04-28
43 Views
Generics
Java에서 Generic type은 자료형을 매개화한 '일반적인' class 혹은 interface를 말한다. < > 기호 사이에 type을 변수처럼 표기한다.
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
Box<Integer> integerBox = new Box<Integer>();
여러 개의 Type argument를 쉼표로 구분하여 받는 것도 가능하다. 이와 같은 방식으로 Generic method도 만들 수 있다.
Generic class / method에서, 모든 종류의 type이 아니라 특정 class의 subclass인 타입만을 받고 싶을 수 있다. 그런 Bounded type parameter를 구현하기 위해서는 type parameter에 extends 키워드를 사용한다.
public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue());
}
public <U extends Number> void inspect(U u){
System.out.println(u.getClass().getName());
}
Generic code를 위해, parameter, field, local variable의 타입을 고정하지 않기를 원할 수 있다. 그럴 때는 unknown type을 의미하는 wildcard를 사용하는데, 물음표(?)를 이용하여 타입을 표시한다.
List<? extends Number> intList = new ArrayList<>();
List<? extends Comparable<T>> comparableList = new ArrayList<>();