일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 개발/Java
- 개발/MySQL
- 알고리즘
- 개발/프레임워크&라이브러리
- AI/ML
- ⌨️Developer/보안
- 개발
- AI/GPT
- 카카오테크캠퍼스
- 개발/Tools/프레임워크/Spring
- 개발/보안
- 개발/CS/알고리즘
- 개발/에러
- 개발/webrtc
- 대외활동/카카오테크캠퍼스
- electron
- 개발/OOP
- 개발/언어론
- 개발/Electron
- 개발/CS/OS
- 취업
- 개발/환경
- 개발/Java/Spring
- 개발/컴퓨터네트워크
- ⌨️Developer
- 카테캠
- ai
- 개발/언어/Java
- 카카오 테크 캠퍼스
- 개발/네트워크
- Today
- Total
봄수의 연구실
Java 런타임에 매개변수 이름 얻는 방법 본문
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 |