본문 바로가기
프로그래밍/Java

[Java] 리플렉션(Reflection)과 자바 다이나믹 프록시(Java Dynamic Proxy)

by 시간많은백수 2023. 10. 15.
반응형

💡리플렉션(Reflection)

리플렉션은 자바 언어의 런타임(Runtime) 환경에서 클래스 및 객체의 메타데이터(예: 클래스의 이름, 메서드, 필드, 생성자 등)를 다루는 기술입니다. 이는 자바에서 다음과 같은 일을 할 수 있게 해줍니다.

  • 클래스 정보 가져오기: Class 클래스를 사용하여 클래스의 정보를 동적으로 가져올 수 있습니다. 예를 들어, 클래스 이름으로 클래스를 동적으로 로드하거나 클래스의 패키지, 부모 클래스, 인터페이스를 확인할 수 있습니다.
  • 객체 생성 및 메서드 호출: Class 객체를 사용하여 객체를 동적으로 생성하거나, 클래스의 메서드를 호출할 수 있습니다. 이것은 객체의 동적 로딩 및 실행을 가능하게 합니다.
  • 필드 값 변경: 리플렉션을 사용하여 클래스의 필드 값을 읽거나 수정할 수 있습니다.

리플렉션은 매우 강력한 도구이지만 주의해서 사용해야 합니다. 잘못된 사용은 런타임 오류를 발생시키거나 보안 문제를 초래할 수 있습니다.

 

💡자바 다이나믹 프록시 (Java Dynamic Proxy)

자바 다이나믹 프록시는 인터페이스를 구현한 객체의 동작을 런타임에 동적으로 변경 또는 확장하는 기술입니다. 주로 AOP (Aspect-Oriented Programming) 패러다임과 함께 사용되며, 다음과 같은 상황에서 유용합니다.

  • 메서드 호출 가로채기: 다이나믹 프록시를 사용하면 인터페이스를 구현한 객체의 메서드 호출을 가로챌 수 있습니다. 이를 통해 메서드 호출 전후에 특정 작업을 수행할 수 있습니다. 예를 들어, 로깅, 트랜잭션 관리, 보안 체크 등을 추가할 수 있습니다.
  • 인터페이스 구현을 변경: 다이나믹 프록시를 사용하여 이미 존재하는 객체에 대해 새로운 기능을 추가할 수 있습니다. 이를 통해 코드의 재사용성을 높일 수 있습니다.

자바 다이나믹 프록시를 생성하려면 java.lang.reflect.Proxy 클래스와 InvocationHandler 인터페이스를 사용합니다. Proxy 클래스는 인터페이스를 구현한 프록시 객체를 생성하고, InvocationHandler는 프록시 객체의 메서드 호출을 처리하는 역할을 합니다.

 

요약하면, 리플렉션은 클래스 및 객체의 메타데이터를 다루는 능력을 제공하고, 자바 다이나믹 프록시는 인터페이스를 구현한 객체의 동작을 런타임에 변경하거나 확장하기 위한 메커니즘을 제공하는 기술입니다.

반응형