Untitled

정의

지정된 메소드가 호출(Invocation)될 때메소드를 가로채어 부가기능들을 추가할 수 있도록 지원하는 것

사전적으로는 대리인

목적 및 특징

목적

Real Subject는 자신의 기능에만 집중을 하고 그 이외 부가 기능을 제공하거나 접근을 제어하는 역할을 Proxy 객체에게 위임한다.

SOLID원칙 중 SRP를 지향하는 코드로 작성이 가능해진다.

특징

예시

Spring AOP, CGLib와 JDK Proxy

Spring boot는 프록시 객체를 생성할 때 기본적으로 CGLib를 사용한다. 그 이유는 JDK Proxy는 내부적으로 Reflection을 사용하기 때문이다. Reflection은 비용이 비싼 효율성이 떨어지는 API이고, JDK Proxy는 타겟으로 인터페이스만을 허용하기 때문이다.

의무적으로 서비스 계층에서 인터페이스를 xxxxImpl클래스로 작성하던 관례도 다 JDK Proxy의 특성 때문이기도 하다.

JDK Proxy의 InvocationHandler의 invoke메서드를 오버라이딩 해서 Proxy위임 기능을 수행하는데, 이 때 메서드에 대한 명세를 가져올 때 Refelction이 사용된다.

장점

단점