구체적인 클래스 타입을 알지 못하더라도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API.
컴파일 시간이 아닌 실행 시간에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법.
리플렉션으로 우리가 스프링에서 @Component, @Bean같은 어노테이션을 사용할 수 있다.
런타임 시에 클래스 정보를 동적으로 검사/조작할 수 있어 유연한 프로그래밍 가능
일반적으로 메소드를 호출할 때 컴파일 시점에서 분석된 클래스를 사용하지만, 리플렉션은 런타임에 클래스를 분석하므로 속도가 느리다. 이러한 특징으로 타입 체크가 컴파일 타임에 불가능하고, 단순히 필드 및 메소드를 접근할 때보다 리플렉션을 사용하여 접근할 때 성능이 느리다.
일반적인 웹 애플리케이션 개발자는 사실 리플렉션을 사용할 일이 거의 없어, 정말 필요한 곳에만 리플렉션을 한정적으로 사용해야한다.