[java] 리플렉션을 사용한 메소드 오버로딩 처리

자바에서 메소드 오버로딩은 같은 이름을 가진 여러 메소드를 정의하는 것을 의미합니다. 이때, 매개변수의 타입, 개수, 또는 순서가 달라야 합니다. 리플렉션(Reflection)은 런타임에 클래스의 정보를 조회하고 조작하기 위한 기술을 말합니다. 이번 포스트에서는 리플렉션을 사용하여 메소드 오버로딩을 처리하는 방법에 대해 알아보겠습니다.

리플렉션으로 메소드 조회하기

먼저, 메소드 오버로딩을 정의한 클래스로부터 메소드를 조회하는 방법부터 알아봅시다.

import java.lang.reflect.Method;

public class MethodOverloadingExample {
    public void printMessage(String message) {
        System.out.println(message);
    }

    public void printMessage(int number) {
        System.out.println("Number: " + number);
    }

    public static void main(String[] args) {
        Method[] methods = MethodOverloadingExample.class.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println("메소드 이름: " + method.getName());
            System.out.println("매개변수 타입: " + method.getParameterTypes()[0]);
        }
    }
}

위 코드는 MethodOverloadingExample 클래스에서 getDeclaredMethods 메서드를 사용하여 클래스에 정의된 모든 메소드를 가져와 각 메소드의 이름과 매개변수 타입을 출력하는 예제입니다.

메소드 호출하기

리플렉션을 사용하여 메소드를 동적으로 호출할 수 있습니다. 메소드의 이름과 매개변수 타입을 기반으로 원하는 메소드를 선택하여 호출할 수 있습니다. 예를 들어, 아래 코드는 리플렉션을 사용하여 printMessage 메소드를 호출하는 예제입니다.

import java.lang.reflect.Method;

public class MethodOverloadingExample {
    public void printMessage(String message) {
        System.out.println(message);
    }

    public void printMessage(int number) {
        System.out.println("Number: " + number);
    }

    public static void main(String[] args) throws Exception {
        MethodOverloadingExample instance = new MethodOverloadingExample();
        
        Method method = MethodOverloadingExample.class.getMethod("printMessage", String.class);
        method.invoke(instance, "Hello, Reflection!");
        
        method = MethodOverloadingExample.class.getMethod("printMessage", int.class);
        method.invoke(instance, 123);
    }
}

위 코드에서는 getMethod 메서드를 사용하여 메소드의 이름과 매개변수 타입으로 메소드를 선택한 후, invoke 메서드를 사용하여 메소드를 호출하고 있습니다.

결론

이번 포스트에서는 리플렉션을 사용하여 메소드 오버로딩을 처리하는 방법에 대해 알아보았습니다. 리플렉션은 동적으로 클래스의 정보를 가져오고 조작할 수 있는 강력한 기술이지만, 과용하면 성능 저하나 보안 문제를 일으킬 수 있으므로 신중하게 사용하여야 합니다. 여러 메소드 중에서 적절한 메소드를 선택하여 호출할 때에는 신중한 검증이 필요합니다.

자세한 내용은 다음 링크를 참고하세요.

어떠한 점이든 추가 질문이 있으시면 언제든지 물어봐 주세요.