[java] 자바 제네릭의 타입 파라미터 제약 조건

자바 제네릭을 사용할 때, 타입 파라미터에 제약을 걸어야 하는 경우가 있습니다. 제네릭의 타입 파라미터를 사용할 때 발생할 수 있는 다양한 제약 조건들을 살펴보겠습니다.

와일드카드 자료형

와일드카드 자료형은 제네릭 타입의 일반적인 형태를 나타내는데 사용됩니다. ? 기호로 표현되며, 예를 들어 List<?>와 같이 사용됩니다. 와일드카드 자료형은 일반적인 상황에서 보통 사용되며, 타입 파라미터의 제한이 없습니다.

와일드카드 자료형은 제네릭을 사용할 때 타입 파라미터에 일반적인 제약이 필요 없는 경우에 주로 사용됩니다. 예를 들어, List<?>어떤 종류의 요소라도 포함할 수 있는 리스트를 나타냅니다.

상한 제한

자바 제네릭에서 상한 제한은 타입 파라미터가 특정 클래스의 서브타입이어야 함을 나타냅니다. 상한 제한은 extends 키워드를 사용하여 정의되며, 예를 들어 class Box<T extends Number>와 같이 사용됩니다.

위의 예시에서 TNumber 클래스 또는 그 하위 클래스만을 허용하는 타입 파라미터입니다. 따라서 Box<Integer>Box<Double>은 유효하지만, Box<String>은 유효하지 않습니다.

하한 제한

하한 제한은 상한 제한과 정반대의 의미로, 타입 파라미터가 특정 클래스의 슈퍼타입이어야 함을 나타냅니다. 하한 제한은 super 키워드를 사용하여 정의되며, 주로 쓰기 전용 연산에 사용됩니다.

예를 들어, class Box<T super Integer>와 같이 사용할 수 있습니다. 이 경우 TInteger 클래스슈퍼클래스이거나 Integer 클래스 자체여야 합니다.

예시 코드

다음은 상한 제한을 사용한 제네릭 클래스의 예시 코드입니다.

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

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

    public double getDoubleValue() {
        return value.doubleValue();
    }
}

이 예시 코드에서 TNumber 클래스 또는 그 하위 클래스만을 허용하는 상한 제한을 가지고 있습니다.

요약

이번 포스트에서는 자바 제네릭의 타입 파라미터에 제약을 거는 방법에 대해 다뤘습니다. 와일드카드 자료형을 포함한 상한 제한하한 제한에 대한 내용을 살펴보았으며, 각 제약 조건의 활용 방법에 대해 살펴보았습니다.

제네릭을 사용할 때 적절한 제약 조건을 걸어주는 것은 안정성유연성을 확보하는 데 도움이 됩니다.

참고 자료

이 포스트에서 소개된 내용은 다양한 상황에 따라 상세한 이해가 필요할 수 있으므로, 자세한 내용은 Oracle 자바 공식 문서를 참고하시기 바랍니다.