[java] 제네릭 메서드에서 제네릭 타입의 암시적 형변환

제네릭 메서드를 사용할 때, 때로는 메서드 내에서 사용되는 제네릭 타입의 암시적 형변환이 필요할 수 있습니다.

예를 들어, 제네릭 메서드가 두 개의 제네릭 타입을 받아들이고, 이를 비교하여 더 큰 값을 반환하는 경우를 생각해보겠습니다.

public <T extends Comparable<T>> T getMax(T a, T b) {
    return a.compareTo(b) < 0 ? b : a;
}

이 메서드에서는 T라는 제네릭 타입을 사용하고 있습니다. 이때 a.compareTo(b)에서 암시적으로 T 타입의 형변환이 일어나는데, compareTo 메서드의 반환 타입은 int이지만, T 타입으로 반환됩니다. 이러한 형변환은 자바 컴파일러에 의해 자동으로 처리되어 사용자가 직접 형변환 코드를 작성하지 않아도 됩니다.

암시적 형변환은 자바 제네릭의 강력한 기능 중 하나이며, 제네릭 메서드를 보다 유연하게 활용할 수 있도록 도와줍니다.

이러한 메커니즘은 자바 컴파일러의 타입 소거(type erasure)와 관련이 있으며, 런타임에는 제네릭 타입에 대한 정보가 소거되므로, 이러한 형변환이 필요합니다.

참고문헌: