[java] 타입 변수의 제약 조건과 하한 경계(Bounded Wildcards)

개요

Java 제네릭을 사용할 때, 타입 변수의 제약을 설정하여 특정 타입의 하위 타입만을 허용하는 하한 경계(Bounded Wildcards)를 사용할 수 있습니다. 이 기능은 제네릭을 더욱 유연하게 활용할 수 있게 해줍니다.

타입 변수의 제약

제네릭 클래스나 메서드를 정의할 때, 특정 타입 뿐만 아니라 해당 타입의 하위 타입을 포함하여 다양한 타입을 인자로 받을 수 있습니다. 하지만 때로는 특정 타입과 그 하위 타입들만을 인자로 받기를 원할 수 있습니다. 이때 타입 변수의 제약을 설정하여 원하는 타입의 하위 타입만을 허용하는 제네릭을 정의할 수 있습니다.

하한 경계(Bounded Wildcards) 사용 예시

다음은 Box 클래스를 예로 들어, 하한 경계를 사용하는 방법을 보여줍니다.

public class Box<T> {
    private T item;

    public void setItem(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }
}

위의 Box 클래스에서 setItem 메서드를 수정하여 특정 타입 Fruit과 그 하위 타입만을 인자로 받도록 하려면 다음과 같이 하한 경계를 사용합니다.

public void setItem(Box<? extends Fruit> item) {
    this.item = item;
}

결론

Java의 제네릭을 사용할 때, 타입 변수의 제약 조건과 하한 경계를 설정함으로써 보다 정교하고 안전한 코드를 작성할 수 있습니다. 하한 경계를 사용하여 특정 타입과 그 하위 타입들만을 제한하는 방법을 활용하면, 보다 강력한 제네릭 클래스나 메서드를 정의할 수 있습니다.

참고 자료