힙 영역에 로드되어 있는 클래스 타입의 객체를 통해
필드/메소드/생성자를 접근 제어자와 상관 없이 사용할 수 있도록 지원하는 API
컴파일 시점이 아닌 런타임 시점에 동적으로 특정 클래스의 정보를 추출해낼 수 있음
=> 클래스로더를 통해 읽어온 클래스 정보를 사용하는 기술
Class c = Class.forName("클래스이름");
// 메소드
Method[] m = c.getMethods();
// 필드
Field[] f = c.getFields();
// 구조체
Constructor[] cs = c.getConstructors();
Class[] inter = c.getInterfaces();
Class superClass = c.getSuperclass();
Reflection을 사용해서 스프링에서는 런타임 시에 개발자가 등록한 빈을 애플리케이션에서 가져와 사용할 수 있다
ex) Spring 프레임워크 DI, Serialization/Deserialization 라이브러리
@Component 어노테이션을 사용하여 클래스를 컴포넌트로 등록한다.
컴포넌트 스캔은 스프링이 애플리케이션을 시작할 때 지정된 패키지에서
@Component 가 붙은 클래스를 찾아서 객체를 생성한다.
이때 스프링은 리플렉션을 사용하여 클래스의 정보를 조회하고 객체를 생성한다.
스프링에서는 의존성 주입을 사용하여 객체 간의 의존 관계를 느슨하게 결합합니다.
의존성 주입을 사용하면 객체 간의 의존 관계를 설정하기 위해 직접 코드를 작성할 필요가 없습니다.
스프링은 리플렉션을 사용하여 의존 관계가 필요한 클래스의 생성자를 호출하고 필요한 객체를 주입합니다.
스프링에서는 AOP를 사용하여 애플리케이션의 여러 부분에 공통으로 적용되는 기능을 모듈화한다
AOP는 프록시 객체를 생성하여 핵심 로직을 실행하기 전과 후에 공통으로 수행할 코드를 추가한다
이때 스프링은 리플렉션을 사용하여 프록시 객체를 생성하고 필요한 메소드를 호출한다
[자바] JVM 구조 (0) | 2025.03.27 |
---|---|
[자바] 추상 클래스와 인터페이스에 대해 설명해주세요 (0) | 2025.03.27 |
[자바] Collections API : TreeMap (0) | 2024.10.22 |
[Java] Exception, try-catch-finally, try-with-resources (0) | 2023.12.24 |
[자바] 이팩티브자바 : 2. 생성자에 매개변수가 많다면 빌더를 고려해라 (0) | 2023.10.17 |