리플렉션은 자바에서 클래스나 멤버에 대한 정보를 런타임에 조사하고, 조작할 수 있는 기능이야. 예를 들어, 클래스의 이름, 메소드, 필드, 생성자 등에 대한 정보를 프로그램 실행 중에 알아내고, 이를 통해 객체를 생성하거나 메소드를 호출할 수 있어. 이 기능 덕분에, 개발자는 코드의 유연성과 확장성을 높일 수 있어.
예시:
Class<?> clazz = Class.forName("java.lang.String");
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
예시 코드에서 Class.forName("java.lang.String")
은 String
클래스에 대한 Class
객체를 가져와. 그리고 getDeclaredMethods()
메소드를 사용해 해당 클래스에 정의된 모든 메소드의 정보를 얻어내는 거야. 이렇게 리플렉션을 활용하면, 런타임에 동적으로 클래스의 정보를 얻어내고, 이를 바탕으로 다양한 작업을 할 수 있지.
자바의 리플렉션은 프레임워크와 라이브러리에서 매우 중요하게 사용돼. 특히 스프링 프레임워크에서는 리플렉션을 사용해 많은 핵심 기능을 구현해. 예를 들어, 의존성 주입(Dependency Injection)이 그 중 하나야. 스프링은 리플렉션을 통해 클래스의 메타데이터를 분석하고, @Autowired
어노테이션이 붙은 필드를 찾아서 자동으로 의존성을 주입해줘.
이 과정에서 스프링 컨테이너는 리플렉션을 사용해 해당 필드의 타입에 맞는 빈(bean)을 찾고, 그 빈을 해당 필드에 할당해. 이를 통해 개발자는 객체의 생성과 의존성 관리를 수동으로 하지 않아도 돼. 이런 방식으로 스프링은 개발자가 더 쉽게, 유연하게 애플리케이션을 구성하고 확장할 수 있게 도와주지.
리플렉션은 자바에서 객체의 클래스 정보를 런타임에 조사하고 조작할 수 있는 API를 제공해. 이를 통해 클래스의 구조, 메소드, 필드 등에 대한 상세한 정보를 얻을 수 있어.