[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)와 관련이 있으며, 런타임에는 제네릭 타입에 대한 정보가 소거되므로, 이러한 형변환이 필요합니다.
참고문헌:
- https://docs.oracle.com/javase/tutorial/java/generics/why.html
- https://docs.oracle.com/javase/tutorial/java/generics/methods.html