상한, 하한 와일드 카드

SungMin·2026년 6월 6일

자바 심화 정리

목록 보기
34/34
static <T extends Animal> void printGenericV2(Box<T> box) {
      T t = box.get();
System.out.println("이름 = " + t.getName()); }
static void printWildcardV2(Box<? extends Animal> box) { Animal animal = box.get();
System.out.println("이름 = " + animal.getName());
}
  • 제네릭 메서드와 마찬가지로 와일드 카드도 상한 제한을 둘 수 있다.
  • 만약 다른 타입이 들어오면 컴파일 에러가 발생한다.
  • 결과적으로 Animal의 기능을 호출할 수 있다.

타입 매개변수가 꼭 필요한 경우

와일드 카드는 제네릭을 정의할 때 사용하는 것이 아니다.
타입인자가 전달된 제네릭 타입을 활용할 때 사용한다.

static <T extends Animal> T printAndReturnGeneric(Box<T> box) {
      T t = box.get();
System.out.println("이름 = " + t.getName());
return t; }
static Animal printAndReturnWildcard(Box<? extends Animal> box) { Animal animal = box.get();
System.out.println("이름 = " + animal.getName());
return animal;
}

와일드카드는 새로운 타입 매개변수를 정의하지 않는다.
따라서 전달된 타입을 그대로 반환하거나 타입 정보를 유지해야 하는 경우에는 제네릭 메서드를 사용해야 한다.

쉽게 이야기 해서 일반적인 메서드를 사용한다고 보면 된다.


하한 와일드 카드

와일드 카드는 상한 뿐만 아니라 하한도 존재한다.

package generic.test.ex5;

import generic.animal.Animal;
import generic.animal.Cat;
import generic.animal.Dog;

public class WhildcardMain2 {
    public static void main(String[] args) {
        Box<Object> objectBox = new Box<>();
        Box<Animal> animalBox = new Box<>();
        Box<Dog> dogBox = new Box<>();
        Box<Cat> catBox = new Box<>();

        // Animal포함 상위 타입 전달 가능
        writeBox(objectBox);
        writeBox(animalBox);

        Animal animal = animalBox.get();
        System.out.println("animal = " + animal);
    }

    // 최소환 Animal부터
    public static void writeBox(Box<? super Animal> box) {
        box.set(new Dog("멍멍이", 100));

    }
}

하한 와일드카드는 특정 타입과 그 부모 타입만 허용한다.
주로 데이터를 저장(Write)할 때 사용한다.


[정리]

  • 와일드카드도 상한 제한(? extends Animal)을 사용할 수 있다.
  • 상한 제한을 사용하면 Animal과 그 자식 타입만 허용된다.
  • 와일드카드는 새로운 타입 매개변수를 정의하지 않는다.
  • 타입 정보를 유지하거나 반환 타입까지 연결해야 한다면 제네릭 메서드를 사용해야 한다.
  • 하한 와일드카드(? super Animal)는 Animal과 그 부모 타입을 허용한다.
  • 상한 와일드카드는 주로 조회(Read)에 사용한다.
  • 하한 와일드카드는 주로 저장(Write)에 사용한다.
  • 실무에서는 PECS(Producer Extends, Consumer Super) 원칙으로 기억하는 경우가 많다.
profile
오늘도 한 걸음씩 나아가

0개의 댓글