Skip to Content
Suffering builds character
아카이브21.spring Aop동적 프록시1.동적 프록시

1.동적 프록시

이러한 Proxy 개념은 타겟 객체의 코드에 영향을 주지 않으면서도 타겟 객체가 동작 전후에 별도의 부가 기능을 적용할 수 있는 유용한 방법이지만,

개발자 입장에서는 이러한 처리를 수행하기 위해 별도의 프록시 객체를 일일이 작성하는데에 시간을 소비하며 번거로운 작업을 하는 것을 선호하지 않음

  • 반복적인 코드 작성
    타겟 객체마다 프록시 클래스를 따로 만들어야 함
  • 유지보수 어려움
    부가 기능을 바꾸려면 모든 프록시 클래스를 수정해야 함
  • 확장성 부족
    수십, 수백 개의 인터페이스나 클래스에 공통 부가기능을 적용하기 어려움

→ 정리하면, 정적인 방식으로 프록시 객체를 일일이 구현하면 중복된 코드가 늘어나고, 개발 효율성이 떨어진다는 단점이 생김


Q. 만약 런타임 시점에 프록시 객체를 자동으로 생성할 수 있다면?

개발자가 직접 프록시 클래스를 작성, 객체를 생성하지 않아도 되고, 인터페이스를 통해 공통적인 부가 기능을 프록시에 위임할 수 있다면?

  • 중복 제거
    여러 클래스에 공통 기능을 프록시로 쉽게 적용 가능
  • 유연성
    실행 시점에 어떤 객체를 감쌀지, 어떤 부가 기능을 붙일지 결정할 수 있음
  • 생산성 향상
    직접 프록시 클래스를 일일이 작성할 필요가 없음

1. 동적 프록시, Dynamic Proxy

Java에서는 java.lang.reflect 패키지가 제공하는 Reflection API를 통해 런타임에 프록시 객체를 바로 생성할 수 있는 방법을 제공하고 있음

따라서 개발자는 별도의 Proxy 클래스를 직접 구현하지 않고도, Reflection API를 통해 동적으로 프록시 객체를 생성하여 활용할 수 있음

이렇게 Reflection API를 통해 생성된 Proxy 객체는 프로그램이 실행되는 시점을 의미하는 런타임(Runtime) 시점에 프록시 객체를 동적(Dynamic)으로 생성하기 때문에 Dynamic Proxy라고함

2. Proxy의 기능 구성

Proxy는 크게 아래의 두 가지 기능으로 구성됨

2-1. 위임과 부가 기능 수행

1. 위임(Delegation)
Target 객체와 같은 메서드를 구현한 후 해당 메서드가 호출되면 Target 객체로 처리를 위임(Delegate)

2. 부가 기능 수행
지정된 요청에 대해 부가 기능 로직을 수행

Last updated on