컴파일 시간이 아닌 실행 시간에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법
즉, 리플렉션은 구체적인 클래스 타입을 알지 못하더라도 런타임에 그 클래스의 메서드, 타입 변수들에 접근 할 수 있도록 해주는 자바 API이다.
자바는 정적인 언어다. 이 말은 "자바는 컴파일 시점에 클래스의 타입이 결정되기 때문에 런타임에서 어떤 클래스 타입이 사용될지 모른다”라는 의미이다. (지네릭스도 동일한 원리)
https://ckdgus.tistory.com/89 (형변환)
하지만 리플렉션을 사용하면 동적으로 형변환이 가능하다.
그러면 어떻게 가져올 수 있는지?
자바를 실행 시키면 클래스 파일로 변환이 된다.
클래스가 사용되는 시점에 JVM 클래스 로더에 의해 클래스가 메모리에 로딩이 된다.
이렇게 .class의 정보와 Class 객체는 JVM Run Time Data Area의 Method Area, Heap Area에 저장된다.
이러한 정보들을 java.lang.reflect에서 접근할 수 있게 도와준다.
java.lang.reflect패키지의 클래스를 사용하면 런타임 시에 위 영역에 접근하여 클래스의 정보, 접근 제어자, 패키지, 어노테이션 등을 알아낼 수 있는 것이다.
동적으로 클래스를 사용해야 할 때 사용.
작성 시점에는 어떠한 클래스를 사용해야 할 지 모르지만 런타임 시점에서 갖와 실행해야 하는 경우 필요하다.’