[파이썬] 프록시 패턴과 객체 대리

프록시 패턴은 소프트웨어 개발에서 자주 사용되는 디자인 패턴 중 하나입니다. 이 패턴을 사용하면 객체를 간접적으로 접근하거나 제어할 수 있습니다. 객체 대리 패턴이라고도 불리는 이 패턴은 다양한 상황에서 유용하게 사용될 수 있습니다.

객체 대리란?

객체 대리는 실제 객체의 대리 역할을 하는 객체입니다. 이 대리 객체는 실제 객체에 대한 접근을 제어하고, 필요한 추가 작업을 수행할 수 있습니다. 대리 객체는 클라이언트 코드가 실제 객체를 직접 사용함으로써 발생할 수 있는 부가적인 작업을 처리하고, 실제 객체를 보호하거나 접근을 제한할 수 있습니다.

프록시 패턴의 구조

프록시 패턴은 보통 다음과 같은 구조를 가집니다:

프록시 패턴의 예제

아래는 Python 언어를 사용하여 프록시 패턴을 구현하는 간단한 예제입니다. 여기서는 웹 페이지를 요청하는 프록시 객체를 구현해보겠습니다.

# 인터페이스
class WebPage:
    def display_page(self):
        pass

# 실제 객체
class RealWebPage(WebPage):
    def display_page(self):
        print("Displaying web page...")

# 프록시 객체
class WebPageProxy(WebPage):
    def __init__(self):
        self.web_page = None

    def display_page(self):
        if self.web_page is None:
            self.web_page = RealWebPage()
        self.pre_display()
        self.web_page.display_page()
        self.post_display()

    def pre_display(self):
        print("Loading web page...")

    def post_display(self):
        print("Web page loaded.")

# 클라이언트 코드
web_page_proxy = WebPageProxy()
web_page_proxy.display_page()

위의 예제에서 WebPageProxyWebPage 인터페이스를 구현한 프록시 객체입니다. display_page 메소드에서는 실제 객체 RealWebPage에 대한 접근을 제어하고, 필요한 부가 작업인 로딩 메시지를 출력합니다.

이렇게 프록시 패턴을 사용하면 클라이언트 코드는 실제 객체에 직접 접근하지 않고, 프록시 객체를 통해 간접적으로 접근할 수 있습니다. 이를 통해 추가적인 작업을 수행하거나, 실제 객체를 보호할 수 있습니다.

프록시 패턴의 장점

프록시 패턴을 사용하면 다음과 같은 장점을 얻을 수 있습니다:

프록시 패턴은 복잡한 시스템에서 객체에 대한 접근을 제어하고 관리하기 위해 유용한 패턴입니다. 프록시를 사용하면 소프트웨어의 디자인을 보다 유연하게 만들 수 있으며, 확장성과 유지 보수성을 개선할 수 있습니다.