티스토리 뷰

Java 런타임에 매개변수 이름 얻는 방법

Reflection API

Java에서 Reflection API는 프로그램이 컴파일 시점에 특정 타입을 알지 못해도 런타임에 객체를 조작할 수 있게 해줍니다.
이는 런타임에 클래스, 인터페이스, 필드, 메소드를 조사할 수 있게 하여, 컴파일 시점에 인터페이스, 필드, 메소드 등의 이름을 알지 못해도 됩니다.

매개 변수와 관련하여 Reflection API를 사용하면 런타임에 메소드 매개 변수를 조사할 수 있습니다. 다음은 예시입니다:

Method[] methods = MyClass.class.getMethods();

for (Method method : methods) {
    Parameter[] parameters = method.getParameters();
    for (Parameter parameter : parameters) {
        System.out.println(parameter.getName());
    }
}

그러나 이 접근 방식에는 중요한 경고 사항이 있습니다.
기본적으로 Java 컴파일러는 .class 파일에 공식 매개 변수 이름을 저장하지 않습니다.
이는 디버그 정보 없이 프로그램을 컴파일하면 기본적으로 매개 변수 이름이 런타임에 사용할 수 없음을 의미합니다.

여기서 javac --parameters 옵션이 중요합니다.
프로그램을 javac --parameters 옵션으로 컴파일하면 .class 파일이 공식 매개 변수 이름에 대한 정보를 유지합니다.
이 옵션을 사용하면 위의 예제와 같이 Reflection API를 사용하여 런타임에 매개 변수 이름을 검색할 수 있습니다.

Classify 방법 (Deprecated)

Java 1.8 이전에는 런타임에 메소드 매개 변수 이름을 검색하는 것이 다소 까다로웠습니다.
이를 달성하는 오래된 방법 중 하나는 .class 파일의 바이트 코드를 조사할 수 있는 분류 메커니즘 또는 분석 도구를 사용하는 것이었습니다.

그러나 이러한 접근 방식은 복잡하고 비효율적이며 일반적으로 권장되지 않았습니다.
Java 1.8부터는 위에서 설명한 대로 Reflection API와 javac --parameters 컴파일러 옵션을 사용하는 것이 선호됩니다.

결론

따라서 질문에 대한 답변은, 매개 변수 이름을 얻는 방법은 실제로 두 가지입니다:

  1. javac --parameters와 함께 Reflection API를 사용하는 방법
    • 이는 런타임에 매개 변수 이름을 검색하는 가장 효과적인 방법입니다.
    • 코드가 javac --parameters 옵션으로 컴파일되어야 합니다.
  2. 분류 또는 바이트 코드 분석 도구를 사용하는 방법:
    • 이는 .class 파일을 낮은 수준에서 분석하는 데 관련된 오래된 방법입니다.
    • 이 방법은 효율성이 떨어지고 더 복잡하며 일반적으로 권장되지 않습니다.

Java 8 이후의 개선사항으로 인해, javac --parameters 컴파일러 옵션과 함께 Reflection API를 사용하는 것이 런타임에 매개 변수 이름을 검색하는 표준 방법이 되었습니다.

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90

'DEV > Java' 카테고리의 다른 글

Servlet  (0) 2023.05.19
Spring MVC  (1) 2023.05.19
Spring의 코드 분리  (0) 2023.05.18
Spring Response와 Request  (0) 2023.05.13
Spring의 HTTP 처리  (0) 2023.05.13