JAVA/포스팅

자바 제네릭스 와일드 카드

짜집퍼박사(짜박) 2023. 11. 19. 00:32

자바 제네릭스에서 와일드 카드(wildcard)는 불특정한 타입을 나타내기 위한 기호입니다. 주로 제네릭스에서 유연성을 확보하고자 할 때 사용됩니다. 와일드 카드는 크게 3가지 형태로 나눌 수 있습니다: ?, ? extends T, ? super T.

 

1. ? (Unbounded Wildcard)

어떤 타입이든 허용합니다.

public static void processElements(List<?> elements) {
    for (Object element : elements) {
        System.out.println(element);
    }
}

위의 메서드는 어떤 타입의 리스트도 받을 수 있습니다.

 

2. ? extends T (Upper Bounded Wildcard)

특정 타입 T나 T의 하위 타입만을 허용합니다.

public static <T> void copyElements(List<? extends T> source, List<T> destination) {
    for (T element : source) {
        destination.add(element);
    }
}

위의 메서드는 source 리스트의 요소를 destination 리스트에 복사하는데, source 리스트의 타입은 T나 T의 하위 타입이어야 합니다.

 

3. ? super T (Lower Bounded Wildcard)

특정 타입 T나 T의 상위 타입만을 허용합니다.

public static <T> void addElement(List<? super T> list, T element) {
    list.add(element);
}

위의 메서드는 list에 요소를 추가하는데, list의 타입은 T나 T의 상위 타입이어야 합니다.

와일드 카드를 사용함으로써 메서드나 클래스를 더 유연하게 만들 수 있습니다. 그러나 와일드 카드를 사용할 때 주의해야 할 점은 메서드 내에서 해당 타입에 대한 안전한 작업을 수행하기가 어려워질 수 있다는 점입니다. 와일드 카드를 사용할 때는 필요에 따라서 상황에 맞게 적절한 방법을 선택해야 합니다.

 

With ChatGPT