반응형
💡리플렉션(Reflection)
리플렉션은 자바 언어의 런타임(Runtime) 환경에서 클래스 및 객체의 메타데이터(예: 클래스의 이름, 메서드, 필드, 생성자 등)를 다루는 기술입니다. 이는 자바에서 다음과 같은 일을 할 수 있게 해줍니다.
- 클래스 정보 가져오기: Class 클래스를 사용하여 클래스의 정보를 동적으로 가져올 수 있습니다. 예를 들어, 클래스 이름으로 클래스를 동적으로 로드하거나 클래스의 패키지, 부모 클래스, 인터페이스를 확인할 수 있습니다.
- 객체 생성 및 메서드 호출: Class 객체를 사용하여 객체를 동적으로 생성하거나, 클래스의 메서드를 호출할 수 있습니다. 이것은 객체의 동적 로딩 및 실행을 가능하게 합니다.
- 필드 값 변경: 리플렉션을 사용하여 클래스의 필드 값을 읽거나 수정할 수 있습니다.
리플렉션은 매우 강력한 도구이지만 주의해서 사용해야 합니다. 잘못된 사용은 런타임 오류를 발생시키거나 보안 문제를 초래할 수 있습니다.
💡자바 다이나믹 프록시 (Java Dynamic Proxy)
자바 다이나믹 프록시는 인터페이스를 구현한 객체의 동작을 런타임에 동적으로 변경 또는 확장하는 기술입니다. 주로 AOP (Aspect-Oriented Programming) 패러다임과 함께 사용되며, 다음과 같은 상황에서 유용합니다.
- 메서드 호출 가로채기: 다이나믹 프록시를 사용하면 인터페이스를 구현한 객체의 메서드 호출을 가로챌 수 있습니다. 이를 통해 메서드 호출 전후에 특정 작업을 수행할 수 있습니다. 예를 들어, 로깅, 트랜잭션 관리, 보안 체크 등을 추가할 수 있습니다.
- 인터페이스 구현을 변경: 다이나믹 프록시를 사용하여 이미 존재하는 객체에 대해 새로운 기능을 추가할 수 있습니다. 이를 통해 코드의 재사용성을 높일 수 있습니다.
자바 다이나믹 프록시를 생성하려면 java.lang.reflect.Proxy 클래스와 InvocationHandler 인터페이스를 사용합니다. Proxy 클래스는 인터페이스를 구현한 프록시 객체를 생성하고, InvocationHandler는 프록시 객체의 메서드 호출을 처리하는 역할을 합니다.
요약하면, 리플렉션은 클래스 및 객체의 메타데이터를 다루는 능력을 제공하고, 자바 다이나믹 프록시는 인터페이스를 구현한 객체의 동작을 런타임에 변경하거나 확장하기 위한 메커니즘을 제공하는 기술입니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 제네릭이란 무엇인가, 왜 사용할까 (0) | 2023.10.17 |
---|---|
[Java] Java의 GC(Garbage Collector)는 어떻게 동작할까 (1) | 2023.10.16 |
[Java] new String()과 ""(리터럴 방식)의 차이 (0) | 2023.10.14 |
[Java] HashMap vs HashTable vs ConcurrentHashMap의 차이 (2) | 2023.10.13 |
[Java] Java가 Call by Value인 이유 (0) | 2023.10.12 |