Java Reflection
Java Reflection
Java Reflection
Reflection
은 Java에서 구체적인 클래스 타입을 알지 못해도 해당 클래스의 정보에 접근하게 해주는 자바 API- JVM의 클래스 로더가
Class 타입의 객체
를 메모리의 힙 영역에 저장해 둔 것을 가져올 수 있게 해 줌- 런타임 시에 클래스 및 관련 정보를 가져올 수 있음
Class 타입의 객체 가져오는 법
- 다음과 같은 방법을 이용해
Class 타입의 객체
를 가져 올 수 있음- 클래스가 있는 경우:
클래스.class
- 인스턴스가 있는 경우:
인스턴스.getClass()
- 클래스 이름을 아는 경우:
Class.forName("클래스명")
- 이렇게 가져온
Class 타입의 객체
를 통해 생성자, 메서드, 필드 등에 대한 정보를 얻을 수 있음
장단점
- 장점
- 런타임 시점에 클래스에 접근할 수 있다는 점에서 유연성 제공
- IDE의 자동완성, Spring의 어노테이션 등의 기능에서 사용됨
- 단점
- 컴파일 시점에서 타입 체크가 안됨
- 구체적인 동작 흐름 파악에 어려울 수 있음
- 접근 제어자를 무시하기 때문에 보안에 취약할 수 있음 (캡슐화를 저해)
References
- https://jeongkyun-it.tistory.com/225
- https://steady-coding.tistory.com/609