ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

[Everything's gonna be fine]