[java] 제네릭 타입의 타입 변수 중복 사용

제네릭은 Java에서 타입 안전성을 보장하는 도구로, 클래스나 메소드를 선언할 때에 실제 타입을 지정하지 않고 추상적인 타입을 사용할 수 있도록 해줍니다. 제네릭 타입을 정의할 때에는 타입 변수를 사용하여 여러 곳에서 동일한 타입을 사용할 수 있도록 합니다. 그러나 경우에 따라서 같은 이름의 타입 변수를 중복해서 사용해야 하는 상황이 발생할 수 있습니다.

public class Pair<K, V> {
    private K key;
    private V value;

    public <K, V> void setKeyAndValue(K key, V value) {
        this.key = key;
        this.value = value;
    }
}

위의 예제에서는 클래스 Pair에서도 제네릭 타입을 사용하고, 메소드 setKeyAndValue에서도 제네릭 타입을 사용하고 있습니다. 이때 클래스에 선언된 제네릭 타입과 메소드에 선언된 제네릭 타입은 각각 독립적인 타입 변수로 취급됩니다.

한편, 메소드에서 클래스에서 정의한 타입 변수를 재사용하고 싶다면 메소드에서 사용하는 타입 변수 선언 앞에 붙여주는 것으로 가능합니다.

public class Pair<K, V> {
    private K key;
    private V value;

    public void setKeyAndValue(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public <T> void displayKeyAndValue() {
        System.out.println("Key: " + key + ", Value: " + value);
    }
}

위의 예제에서는 메소드 displayKeyAndValue에서 새로운 타입 변수 T를 선언하지 않고 클래스에서 정의한 타입 변수 KV를 재사용하여 출력하는 것을 볼 수 있습니다. 이에 따라 클래스 레벨에서 선언된 제네릭 타입 변수와 메소드 레벨에서 선언된 제네릭 타입 변수를 중복 사용하는 방법에 대해서 알아보았습니다.

참고 자료