JAVA Reflection
- Reflection은 런타임에 메서드, 클래스 및 인터페이스의 동작을 검사하거나 수정하는 데 사용되는 API
- 리플렉션에 필요한 클래스는 리플렉션을 이해하는 데 필수적인 java.lang.reflect 패키지에 존재

- 리플렉션은 객체가 속한 클래스에 대한 정보와 객체를 사용하여 실행할 수 있는 해당 클래스의 메서드에 대한 정보를 제공합니다.
- 리플렉션을 통해 사용된 접근 지정자(access specifier)와 상관없이 런타임에 메서드를 호출할 수 있습니다.

- 리플렉션은 클래스, 생성자 및 메서드에 대한 정보를 가져오는 데 사용할 수 있습니다.
ClassConstructorsMethods
The getClass() method is used to get the name of the class to which an object belongs. |
The getConstructors() method is used to get the public constructors of the class to which an object belongs. |
The getMethods() method is used to get the public methods of the class to which an object belong |
getDeclaredMethod()
- 호출할 메서드의 개체를 만듭니다.
Class.getDeclaredMethod(name, parametertype)
Parameters:
- 객체를 생성할 메서드의 이름
- 클래스 객체의 배열
invoke()
- 런타임에 다음 메서드를 사용하는 클래스의 메서드를 호출합니다.
Method.invoke(Object, parameter)
- 클래스의 메서드가 매개 변수를 허용하지 않으면 null이 인수로 전달됩니다.
리플렉션을 통해 클래스 개체의 도움으로 클래스의 개인 변수 및 메서드에 액세스하고 위에서 설명한 개체를 사용하여 메서드를 호출할 수 있습니다.
Class.getDeclaredField(FieldName)
- 프라이빗 필드를 가져오는 데 사용됩니다. 지정된 필드 이름에 대해 Field 유형의 객체를 반환합니다.
Field.setAccessible(true)
- 필드와 함께 사용되는 접근제한자(access modifier)와 상관없이 필드에 액세스할 수 있습니다
Reflection API의 특징
- Extensibility Features: 응용 프로그램은 정규화된 이름을 사용하여 확장성 개체의 인스턴스를 만들어 외부 사용자 정의 클래스를 사용할 수 있습니다.
- Debugging and testing tools: 디버거는 리플렉션 속성을 사용하여 클래스의 전용 멤버를 검사합니다.
- Performance Overhead: Reflective 작업은 상대적으로 성능이 느리므로 성능에 민감한 애플리케이션에서 자주 호출되는 코드 섹션에서는 피해야 합니다.
- Exposure of Internals: 반영 코드는 추상화를 깨뜨리므로 플랫폼 업그레이드로 동작이 변경될 수 있습니다.
참고자료
- Reflection in Java - geeksforgeeks
'Java' 카테고리의 다른 글
java.io.FileNotFoundException (Permission denied) 에러 해결방법 (0) | 2023.02.20 |
---|---|
자바프로젝트에서의 WEB과 WAS (0) | 2022.11.18 |
캡슐화(Encapsulation) in Java (0) | 2022.10.11 |
PriorityQueue in Java (0) | 2022.10.10 |
[번역] The Basics of Java Generics (0) | 2022.10.05 |