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
컴파일러 옵션을 사용하는 것이 선호됩니다.
결론
따라서 질문에 대한 답변은, 매개 변수 이름을 얻는 방법은 실제로 두 가지입니다:
javac --parameters
와 함께 Reflection API를 사용하는 방법- 이는 런타임에 매개 변수 이름을 검색하는 가장 효과적인 방법입니다.
- 코드가
javac --parameters
옵션으로 컴파일되어야 합니다.
- 분류 또는 바이트 코드 분석 도구를 사용하는 방법:
- 이는 .class 파일을 낮은 수준에서 분석하는 데 관련된 오래된 방법입니다.
- 이 방법은 효율성이 떨어지고 더 복잡하며 일반적으로 권장되지 않습니다.
Java 8 이후의 개선사항으로 인해, javac --parameters
컴파일러 옵션과 함께 Reflection API를 사용하는 것이 런타임에 매개 변수 이름을 검색하는 표준 방법이 되었습니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'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 |