Java/Design Pattern
Proxy Pattern (프록시 패턴)
SeongWon
2022. 1. 27. 16:27
반응형
Proxy Pattern (프록시 패턴) 이란?
- proxy는 대리인이라는 의미로, 무언가를 대신 처리한다는 뜻이다.
어떤 객체를 사용하고자 할 때, 이 객체를 직접적으로 참조하는 것이 아니라, 해당 객체를 대행(proxy)하는 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있다. 또한 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수도 있다.
▶ 프록시의 종류
가상 프록시
- 반드시 필요로하는 시점까지 객체의 생성을 연기하고, 해당 객체가 생성된 것처럼 동작하도록 만들고 싶을때 사용하는 패턴이다.
- 프록시 클래스에서 작업들을 처리하고, 리소스가 많이 요구되는 작업들이 필요할 때에만 주체 클래스를 사용하도록 구현한다.
- 예시로, 해상도가 아주 높은 이미지를 처리해야 하는 경우 작업을 분산하는 경우가 있다.
원격 프록시
- 원격 객체에 대한 접근을 제어하며, 로컬 환경에 존재한다.
- 원격 객체에 대한 대변자 역할을 하는 객체이다.
- 서로 다른 주소 공간에 있는 객체에 대해 마치 같은 주소 공간에 있는 것처럼 동작하게 만드는 패턴이다.
보호 프록시
- 주체 클래스에 대한 접근을 제어하기 위한 경우에 객체에 대한 접근 권한을 제어하거나, 객체마다 접근 권한을 달리하고 싶을 때 사용하는 패턴이다.
- 프록시 클래스에서 클라이언트가 주체 클래스에 대한 접근을 허용할지 말지 결정하도록 할 수 있다.
▶ 프록시 패턴의 장점
- 사이즈가 큰 객체가 로딩되기 전에도 프록시를 통해 참조할 수 있다.
- 실제 객체의 public, protected 메소드들을 숨기고 인터페이스를 통해 노출시킬 수 있다.
- 로컬에 있지 않고 떨어져 있는 객체를 사용할 수 있다.
- 원래 객체의 접근에 대해서 사전처리를 할 수 있다.
▶ 프록시 패턴의 단점
- 객체를 생성할 때, 한 단계를 거치게 되므로 빈번한 객체 생성이 필요한 경우에는 성능이 저하될 수 있다.
- 프록시 내부에서 객체 생성을 위해 스레드가 생성, 동기화가 구현되야 하는 경우 성능이 저하될 수 있다.
- 로직이 난해해져서 가독성이 떨어질 수 있다.
▶ 요약
- 제어 흐름을 조정하기 위한 목적으로 대리자를 두는 패턴
- OCP, DIP 활용한 설계 패턴
- 프록시에서 실제 서비스와 같은 이름의 메서드를 구현 (인터페이스 사용)
- 프록시는 실제 서비스에 대한 참조 변수를 갖는다
- 프록시에서 실제 서비스에 존재하는 같은 이름의 메서드를 호출한 후, 해당 값을 반환한다. (전후에 추가 로직 생성 가능)
- 반환 값에 대한 변경은 최대한 이루지지 않도록 한다.
반응형