[java] 제네릭 타입의 타입 변수 제약 조건과 캐스팅

제네릭 타입을 사용할 때에는 타입 변수에 제약 조건을 설정할 수 있습니다. 이를 통해 특정한 종류의 클래스만을 제네릭 타입으로 사용하도록 할 수 있습니다. 또한, 이러한 제약 조건을 통해 제네릭 타입 변수의 명시적 캐스팅을 수행할 수 있습니다.

타입 변수 제약 조건

제네릭 타입 변수에 제약 조건을 설정하기 위해서는 extends 키워드를 사용합니다. 특정 클래스 타입 또는 인터페이스 타입을 지정하여 해당 타입 또는 해당 타입을 구현한 클래스의 인스턴스만을 받도록 제한할 수 있습니다.

아래는 제네릭 타입 변수의 제약 조건을 설정한 예시입니다.

public class Box<T extends Number> {
    private T value;

    public Box(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

위 예시에서 T extends NumberTNumber 클래스를 상속받는 클래스만을 사용할 수 있도록 제한하고 있습니다.

명시적 캐스팅

제네릭 타입 변수에 제약 조건을 설정한 경우, 해당 타입 변수를 사용할 때 명시적 캐스팅을 수행할 수 있습니다. 이를 통해 해당 타입 변수가 제약 조건을 충족하는지를 검사하고 안전하게 사용할 수 있습니다.

아래는 제네릭 타입 변수를 사용할 때의 명시적 캐스팅 예시입니다.

Box<Integer> intBox = new Box<>(10);
int value = intBox.getValue();  // 명시적 캐스팅을 통해 Integer를 int로 변환

위 예시에서 Box 클래스의 getValue 메서드를 통해 Integer 타입을 반환하고 있지만, 이를 int 타입으로 명시적 캐스팅하여 안전하게 사용할 수 있습니다.

제네릭 타입의 타입 변수 제약 조건과 명시적 캐스팅은 안전한 타입 사용을 위해 중요한 개념이며, 제네릭을 활용한 프로그래밍에서 필수적으로 이해해야 하는 부분입니다.

참고 문헌