[java] 제네릭 메서드의 오버로딩(Overloading)

제네릭 메서드는 메서드의 시그니처가 서로 다른 오버로딩이 가능합니다. 하지만 제네릭에 타입 매개변수가 포함되어 있으므로 몇 가지 주의할 점이 있습니다.

제네릭 메서드에서 오버로딩

보통의 메서드 오버로딩과 마찬가지로, 제네릭 메서드도 메서드 이름은 같지만 매개변수의 개수나 타입이 다르게 정의될 수 있습니다.

public class GenericOverloading {
    public <T> T performAction(T param) {
        // 코드 작성
    }

    public <T, V> V performAction(T param1, V param2) {
        // 코드 작성
    }
}

위의 예제에서 performAction 메서드는 두 가지 버전으로 오버로딩되었습니다. 첫 번째 메서드는 한 개의 타입 매개변수를 받고, 두 번째 메서드는 두 개의 타입 매개변수를 받습니다.

주의할 점

제네릭 메서드를 오버로딩할 때 주의해야 할 점이 있습니다. 만약에 다음과 같이 타입 변환 연산자를 사용하여 서로 다른 오버로딩된 메서드를 호출하려고 시도한다면 컴파일 에러가 발생합니다.

GenericOverloading genericOverloading = new GenericOverloading();
String result = genericOverloading.<String>performAction("input");
Integer result2 = genericOverloading.<String, Integer>performAction("input", 123);

위의 코드에서 두 번째 호출은 컴파일되지 않습니다. 컴파일러는 해당 메서드 호출 시 타입 매개변수를 추론하지 못하기 때문에 발생하는 에러입니다.

요약

제네릭 메서드의 오버로딩은 기본적으로 가능하지만, 타입 매개변수를 명시적으로 지정하여 호출할 때 주의해야 합니다. 오버로딩된 제네릭 메서드를 사용할 때는 컴파일러가 타입을 올바르게 추론할 수 있도록 요구사항에 맞게 호출해야 합니다.

이러한 주의 사항을 염두에 두고 제네릭 메서드의 오버로딩을 사용하면 더 효율적으로 코드를 작성할 수 있습니다.

참고 자료: Oracle Java Tutorials - Generic Methods