Java

[java] bounded wildcard 표현

Razelo 2025. 7. 27. 13:30

가끔 오픈소스 코드 보다보면 내부에 아래 같은 표현이 있어서 뭔가 싶었는데 이참에 정리해봤다. 

 

<?> : Unbounded Wildcard : 어떤 타입이든 허용 (제한 없음)

<? extends T> : Upper Bounded Wildcard : T 또는 T의 하위 타입 (상한 제한)

<? super T> : Lower Bounded Wildcard : T 또는 T의 상위 타입 (하한 제한)  

 

 

기억하기 어려우면 PECS로 기억하면 된다. 

Producer extends / Consumer super 

생산자는 extends를 쓰고, Consumer는 super를 쓴다 정도로, 

 

아래 예시 보면 좀 이해가 도움이 될 듯 

static <T> void copy(List<? super T> dest, List<? extends T> src) {
    for (T e : src) {   // src는 값을 "내어주는" 생산자
        dest.add(e);    // dest는 값을 "받아먹는" 소비자
    }
}


    src는 ? extends T → 생산자(읽기 전용)
    dest는 ? super T → 소비자(쓰기 안전)