-
[Spring/디자인패턴] 프록시 패턴Framework/Spring 2021. 7. 18. 22:43
프록시 패턴
- 프록시는 대리인이라는 의미로써, 뭔가를 대신 처리하는 것
- 프록시 클래스를 통해 대신 전달하는 형태로 설계되며, 실제 클라이언트는 프록시로 부터 결과를 받는다.
- 캐시의 기능으로도 활용이 가능하다.
프록시 패턴 예시
<IBrowser>
public interface IBrowser { Html show(); }
<Browser>
public class Browser implements IBrowser { private String url; public Browser(String url){ this.url = url; } @Override public Html show() { System.out.println("browser loading html from:" + url); return new Html(url); } }
- Browser클래스는 IBrowser를 구현하기 위한 클래스이고, 인터페이스의 show메서드를 오버라이드하여 구현하여야 한다.
- 위의 클래스는 show를 호출할 때 마다 새로운 Html객체를 생성하기 때문에 5개의 새로운 객체가 생성된다.
<BrowserProxy>
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:" + url); return html; } }
- 반면 BrowserProxy의 경우 클래스 내부에 Html변수를 갖고 있어 해당 객체가 null일 경우 새로운 객체를 생성하고 null이 아닐경우 해당 html을 리턴하는식으로 변경하여 결과적으로 한 개의 객체를 생성하게 된다.
<Html>
public class Html { private String url; public Html(String url) { this.url = url; } }
<Main>
public class Main { public static void main(String[] args) { /* Browser browser = new Browser("www.naver.com"); browser.show(); browser.show(); browser.show(); browser.show(); browser.show(); */ IBrowser browser = new BrowserProxy("www.naver.com"); browser.show(); browser.show(); browser.show(); browser.show(); browser.show(); } }
'Framework > Spring' 카테고리의 다른 글
[Spring] Ioc(Inversion of Control) (0) 2021.08.04 [Spring] Spring Boot (0) 2021.07.24 [Spring/디자인패턴] 어댑터 패턴 (0) 2021.07.18 [Spring/디자인패턴] 싱글톤 패턴 (0) 2021.07.18 [Spring/디자인패턴] 디자인패턴 (0) 2021.07.17