상똥이의 Back-End 공부방

Reflection API 본문

오류해결

Reflection API

상똥백 2023. 9. 5. 19:58

1. Reflection

- 컴파일 시점이 아닌 런타임 시점에 동적으로 특정 클래스의 정보를 추출해낼 수 있는 프로그래밍 기법

- 힙 영역에 로드되어 있는 클래스 타입의 객체를 통해 필드/메소드/생성자를 접근 제어자와 상관없이 사용할 수 있도록 지원하는 API

- 힙 영역에 로드되어 있는 클래스 타입의 객체를 가져오는 방법 : (1) 클래스.클래스 (2) ㅇ인스턴스.겟클래스 (3) 클래스.폴네임

- 주로 프레임워크 또는 라이브러리 개발 시 사용됨

- jvm의 클래스 로더는 클래스 파일에 대한 로딩이 끝나면 클래스 타입의 객체를 생성해 메모리 힙 영역에 저장

 

2. Reflection 사용하는 프레임워크/라이브러리 소개

- Spring 프레임워크(Ex. DI)

- Test 프레임워크 (Ex. JUnit)

- JSON Serialization/Deserialization 라이브러리 (Ex. Jackson)

- 등등

 

3. 활용

Reflections reflections = new Reflections("탐색할 범위 Ex. 카테고리");

Set<Class<?>> beans = new HashSet<>();
        annotations.forEach(annotation -> beans.addAll(reflections.getTypesAnnotatedWith(annotation)));