자바의 리플랙션이란 ?
자바의 리플렉션 정의
- 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경할 수 있고 메소드를 호출할 수도 있음.
- 자바에서 기본적으로 제공하는 API 입니다.
리플랙션을 통해 가져 올 수 있는 정보
- Class
- Constructor
- Method
- Field
자바 리플랙션 - Class 가져오기
예시 1
- 위 예제에서 String 타입으로 클래스를 탐색해서 선언하는 게 가능
- String의 값은 컴파일 단계에서 체크 안함 / 위 예제에서 toString을 재정의하는 것으로 캐스팅도 필요없이 toString으로 콘솔 출력 가능
- 즉, Example 클래스 내부에서는 Node 함수를 사용하는 것이 없으므로 컴파일할때, Node 클래스를 만들지 않아도 생성 가능
- 즉, 실행할 때만 Node 클래스가 있으면 되고 동적바인딩이 가능
예시 2
- Reflection 쓰기 전
=> 🔎문제점 : 여기에 들어가는 클래스가 사양에 따라 증가한다면 getClass의 if문은 점점 늘어날 것
- Reflection 쓴 후
=> class name을 받아와서 객체를 인스턴스화 해서 return 해준다
Reflection 문제점
- Reflection 느림 => Class.forName과 getConstructor 탐색을 하는 시간이 들기 때문
- 에러가 컴파일에 걸리지 않음 Reflection은 실행하지 않는 이상 에러를 잡아 낼 수가 없음 ! 즉, 확실하게 검증되는 소스가 아니라면, 또 빈번하게 수정되는 소스라면 매우 불편한 기능
Reflection 언제 쓰이는지
- Reflection 기능은 보통 Unit 테스트 환경이나 Framework를 만들 때, 의존성 주입을 설계할 때 많이 사용되는 기능
참조 : 1. Java - Reflection 쉽고 빠르게 이해하기 | By JS | October 14, 2019 | 출처 : https://codechacha.com/ko/reflection/
2. [Java] 29. Reflection 기능을 사용하는 방법 - Class편
출처: https://nowonbun.tistory.com/518 [명월 일지]