자바

리플렉션(Reflection)

누누01 2023. 7. 11. 15:43
728x90

리플렉션(Reflection) 이란 ?

리플렉션은 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API를 말한다.

이 프로그래밍 기법은 컴파일 시간이 아닌 실행 시간에 동적으로 특정 클래스의 정보를 추출할 수 있게 하여 프로그램에 유연성을 더해 준다.

 

일반적으로 리플렉션은 다음과 같은 방식으로 클래스 정보를 얻어올 수 있다.

Class obj = Car.class;
Class obj = Class.forName("Car");

 

 

 

이러한 리플렉션을 개발자가 직접 다루는 경우는 거의 없다. 보통의 경우 구체적인 클래스를 모를 일이 거의 없기 때문이다.

 

 

그렇다면 이 자바 API는 언제 활용될까 ?

 

 

Framework라이브러리, IDE 소프트웨어에서 많이 사용된다.

프레임워크나 라이브러리는 사용자가 나중에 어떤 타입의 클래스를 만들지 예측할 수 없기 때문에, 런타임에 사용자가 넘겨준 클래스의 정보를 분석해 동작할 수 있도록 이 리플렉션을 사용한다.

실제로 IDE 의 자동완성, Hibernate 등등 많은 프레임워크나 라이브러리에서 Reflection을 사용하고 있다.

 

Spring Framework 에서도 Refelction API를 사용하고 있는데, 대표적으로 Spring Container 의 BeanFactory가 있다.

스프링에 등록된 Bean은 애플리케이션이 실행된 후 런타임에 객체가 호출될 때 동적으로 객체의 인스턴스를 생성하는데 이 때 Reflection 을 사용하게 된다.