-
디자인 패턴 - 프록시 패턴(Proxy Pattern)Java 2022. 3. 16. 21:38
대리자, 대변인
프록시 패턴을 사용하지 않을 때
public class Service{ public String runSomething(){ return "서비스"; } }public class ClientWithNoProxy{ public static void main(String[] args){ Service service = new Service(); System.out.println(service.runSomething()); } }직접 Service 객체를 생성하고 메서드를 수행.
프록시 패턴 사용
public interface IBrowser{ show(); }public class Html{ private String url; public Html(String url){ this.url = url; } }public class BrowserProxy implements IBrowser { private String url; private Html html; public BrowserProxy(String url){ this.url = url; } @Override public Html show() { if(html == null){ this.html = new Html(url); System.out.println("BrowserProxy loading html from "+url); } System.out.println("BrowserProxy use cache html"); return html; } }public class Main{ public static void main(String[] args){ IBrowser browser = new BrowserProxy("www.naver.com"); browser.show(); browser.show(); } }- 대리자(BrowserProxy)는 실제 서비스와 같은 이름의 메서드(show)를 구현한다. 이때 인터페이스(IBrowser)를 사용
- 대리자(BrowserProxy)는 실제 서비스에 대한 참조 변수를 갖는다.(합성)
- 대리자(BrowserProxy)는 같은 이름을 가진 메서드(show)를 호출하고 그 값을 클라이언트에게 돌려준다.
"제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴"- 대리자(BrowserProxy)는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있다.
- AOP와 같은 기능을 수행할 때도 proxy패턴을 사용 가능
'Java' 카테고리의 다른 글
디자인 패턴 - 팩터리 메서드 패턴(Factory Method Pattern) (0) 2022.03.18 디자인 패턴 - 템플릿 메서드 패턴(Template Method Pattern) (0) 2022.03.18 디자인 패턴 - 싱글턴 패턴(Singleton Pattern) (0) 2022.03.17 디자인 패턴 - 데코레이터 패턴(Decorator Pattern) (0) 2022.03.17 디자인 패턴 - 어댑터 패턴(Adpater Pattern) (0) 2022.03.16