본문 바로가기
Programming/디자인 패턴

프록시 패턴 Proxy Pattern

by Bam_t 2021. 10. 2.
728x90

프록시(Proxy)는 '대리'라는 의미를 가지고 있습니다. 지금까지 배웠던 패턴들의 내용이 이름을 따라서 동작했으므로 우리는 프록시 패턴도 무언가를 대리하는 패턴임을 알 수 있습니다.


1. 프록시 패턴 소개

프록시 패턴은 실제 시능을 수행하는 객체를 대신해서 프록시 객체가 기능을 대신 수행해 주는 패턴입니다. 그런데 뭔가 대리로 기능을 수행하는 경우가 잘 떠오르지는 않습니다. 우리는 프록시 객체를 다음과 같은 두 가지 상황에서 이용하게됩니다.

  • 실제 기능을 하는 객체가 자원을 많이 소모하는 경우
  • 실제 객체에 대해서 접근 제어가 필요한 경우

 

 

2. 프록시 패턴 구현

프록시 패턴은 간단하게 뼈대만을 가지고 구현해 보겠습니다. 개인적으로 예를 들어서 구체적으로 설명을 처음 들었을 때 긴가민가 했던 경험이 있어서 오히려 헤맸던 기억이 있네요.

우선 동작을 정의한 인터페이스 입니다. 출력하는 기능을 한다는 것을 알 수 있습니다.

public interface IPrinter {
    String print();
}

 

다음으로 실제 객체를 만들어봤습니다. "자몽"이라는 문자열을 반환하도록 한 실 객체입니다.

public class RealPrinter implements IPrinter {
    @Override
    public String print() {
        return "자몽";
    }
}

 

다음으로 프록시 객체입니다. printer라는 객체에 실 객체를 담아 출력을 합니다. 이렇게 함으로써 실 객체의 동작을 숨기는 동시에 프록시 객체가 실 객체의 역할을 해주고 있습니다.

public class ProxyPrinter implements IPrinter {
    IPrinter printer;

    @Override
    public String print() {
        System.out.println("프록시 객체");

        printer = new RealPrinter();

        return printer.print();
    }
}

 

마지막으로 메인 메소드입니다. 메인에서 프록시 객체를 만들고 프록시 객체를 동작하게 합니다.

public class ProxyMain {
    public static void main(String[] args) {
        IPrinter proxy = new ProxyPrinter();

        System.out.println(proxy.print());
    }
}

 

결과를 확인해보면 프록시 객체를 통해 실 객체가 제대로 동작했음을 알 수 있습니다.


https://github.com/Bam-j/DesignPattern/tree/master/src/Proxy

 

GitHub - Bam-j/DesignPattern: 디자인 패턴 블로그 기재

디자인 패턴 블로그 기재. Contribute to Bam-j/DesignPattern development by creating an account on GitHub.

github.com

 

728x90

댓글