The Reflection API
Uses of Reflection
리플렉션은 Java 가상 머신에서 실행 중인 애플리케이션의 런타임 동작을 검사하거나 수정해야 하는 프로그램에서 일반적으로 사용됩니다. 이는 비교적 고급 기능이며, 언어의 기초를 확실히 이해한 개발자만 사용하는 것이 좋습니다. 이러한 주의사항을 염두에 두었을 때, 리플렉션은 강력한 기술이며, 그렇지 않으면 불가능한 작업을 수행할 수 있도록 애플리케이션을 확장할 수 있습니다.
Extensibility Features
애플리케이션은 외부의 사용자 정의 클래스를 확장성 객체로 생성하여 해당 클래스의 완전한 수식 이름(fully-qualified name)을 이용해 사용할 수 있습니다.
Class Browsers and Visual Development Environments
클래스 브라우저는 클래스의 멤버를 나열할 수 있어야 합니다. 비주얼 개발 환경은 리플렉션을 통해 제공되는 타입 정보를 활용하여 개발자가 올바른 코드를 작성하는 데 도움을 줄 수 있습니다.
Debuggers and Test Tools
디버거는 클래스의 private 멤버를 검사할 수 있어야 합니다. 테스트 하니스(test harness)는 리플렉션을 활용하여 클래스에 정의된 API를 체계적으로 호출함으로써 테스트 스위트의 코드 커버리지를 높일 수 있습니다.
Drawbacks of Reflection
리플렉션은 강력하지만 무분별하게 사용해서는 안 됩니다. 리플렉션을 사용하지 않고도 작업을 수행할 수 있다면, 가능한 한 리플렉션을 피하는 것이 바람직합니다. 리플렉션을 통해 코드에 접근할 때 다음과 같은 주의사항을 염두에 두어야 합니다.
Performance Overhead
리플렉션은 동적으로 타입을 해석하기 때문에, Java 가상 머신에서 특정 최적화 작업을 수행할 수 없습니다. 결과적으로 리플렉션을 통한 연산은 일반적인 비리플렉션 코드보다 성능이 떨어지며, 성능에 민감한 애플리케이션의 자주 호출되는 코드에서는 피해야 합니다.
Security Restrictions
리플렉션은 런타임 권한이 필요하며, 보안 관리자가 작동 중일 경우 해당 권한이 없을 수 있습니다. 이는 Applet 등 제한된 보안 컨텍스트에서 실행되어야 하는 코드에 있어 중요한 고려 사항입니다.
Exposure of Internals
리플렉션은 private 필드와 메서드에 접근하는 등 일반 코드에서는 불법인 작업을 수행할 수 있도록 허용하므로, 예상치 못한 부작용을 초래하여 코드가 제대로 작동하지 않거나 이식성을 해칠 수 있습니다. 리플렉션 코드는 추상화를 깨뜨리므로, 플랫폼이 업그레이드되었을 때 동작이 변경될 수 있습니다.
The Reflection API: Table of Contents
- Classes
- Retrieving Class Objects
- Examining Class Modifiers and Types
- Discovering Class Members
- Members
- Fields
- Obtaining Field Types
- Retrieving and Parsing Field Modifiers
- Getting and Setting Field Values
- Methods
- Obtaining Method Type Information
- Obtaining Names of Method Parameters
- Retrieving and Parsing Method Modifiers
- Invoking Methods
- Constructors
- Finding Constructors
- Retrieving and Parsing Constructor Modifiers
- Creating New Class Instances
- Fields
- Arrays and Enumerated Types
- Arrays
- Identifying Array Types
- Creating New Arrays
- Getting and Setting Arrays and Their Components
- Enumerated Types
- Examining Enums
- Getting and Setting Fields with Enum Types
- Arrays
출처 : https://docs.oracle.com/javase/tutorial/reflect/index.html
Trail: The Reflection API (The Java™ Tutorials)
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Dev.java for updated tutorials taking advantag
docs.oracle.com