[Python] Proxy Pattern

미남잉·6일 전
0

Advanced Python

목록 보기
8/10

Python의 Proxy Design Pattern 정리

개념

프록시 패턴은 객체에 대한 접근을 제어하는 대리자 객체를 제공하는 구조적 디자인 패턴이다. 이 패턴은 원본 객체에 대한 간접적인 접근을 가능하게 하여 추가적인 기능을 제공하거나 객체 생성의 비용을 절감할 수 있다.

주요 구성 요소

  1. Subject: 프록시와 실제 객체가 구현해야 하는 공통 인터페이스
  2. RealSubject: 실제 작업을 수행하는 객체
  3. Proxy: RealSubject에 대한 참조를 갖고 Subject 인터페이스를 구현하는 대리자 객체

코드 예제

from abc import ABC, abstractmethod

class Subject(ABC):
    @abstractmethod
    def request(self):
        pass

class RealSubject(Subject):
    def request(self):
        print("RealSubject: Handling request.")

class Proxy(Subject):
    def __init__(self, real_subject: RealSubject):
        self._real_subject = real_subject

    def request(self):
        if self.check_access():
            self._real_subject.request()
            self.log_access()

    def check_access(self):
        print("Proxy: Checking access prior to firing a real request.")
        return True

    def log_access(self):
        print("Proxy: Logging the time of request.")

# 클라이언트 코드
def client_code(subject: Subject):
    subject.request()

if __name__ == "__main__":
    print("Client: Executing the client code with a real subject:")
    real_subject = RealSubject()
    client_code(real_subject)

    print("\nClient: Executing the same client code with a proxy:")
    proxy = Proxy(real_subject)
    client_code(proxy)

프록시 패턴의 장점

  1. 보안 강화: 객체에 대한 접근을 제어할 수 있다.
  2. 부가 기능 추가 용이: 로깅, 캐싱 등의 기능을 쉽게 추가할 수 있다.
  3. 객체 생성 비용 절감: 필요한 시점에 객체를 생성할 수 있다. (lazy initialization)

프록시 패턴의 단점

  1. 성능 영향: 프록시 객체를 통한 간접 접근으로 인해 약간의 성능 저하가 있을 수 있음
  2. 코드 복잡도 증가: 추가적인 클래스로 인해 코드가 복잡해질 수 있음

활용 사례

  1. 가상 프록시: 무거운 객체의 생성을 지연시킬 때 사용
  2. 보호 프록시: 객체에 대한 접근 권한을 제어할 때 사용
  3. 원격 프록시: 원격 객체에 대한 로컬 대리자 역할을 할 때 사용

프록시 패턴은 객체 지향 프로그래밍에서 유용하게 사용되는 패턴으로, 특히 객체의 생성 비용이 높거나 보안이 중요한 상황에서 효과적으로 활용될 수 있다.

Factory랑 차이

  1. Factory 패턴
    • 목적: 객체 생성을 추상화하고 유연성을 제공
    • 주요 기능:
    • 객체 생성 로직을 캡슐화함
    • 런타임에 어떤 객체를 생성할지 결정할 수 있음
    • 사용 시기: 객체 생성 과정이 복잡하거나, 객체의 타입을 런타임에 결정해야 할 때 사용함
  2. Proxy 패턴
    • 목적: 다른 객체에 대한 접근을 제어함
    • 주요 기능:
    • 원본 객체에 대한 대리자 역할을 함
    • 접근 제어, 지연 로딩, 로깅 등의 부가 기능을 제공함
    • 사용 시기: 객체에 대한 접근을 제어하거나, 부가적인 기능을 추가해야 할 때 사용함
  3. 주요 차이점
    1. 목적: Factory는 객체 생성에 중점을 두고, Proxy는 객체 접근 제어에 중점을 둠
    2. 동작 시점: Factory는 객체 생성 시에 작동하고, Proxy는 객체 사용 시에 작동함
    3. 인터페이스: Factory는 새로운 객체를 반환하는 메서드를 제공하고, Proxy는 원본 객체와 동일한 인터페이스를 구현함
    4. 유연성: Factory는 객체 생성의 유연성을 제공하고, Proxy는 객체 사용의 유연성을 제공함
    5. 성능 영향: Factory는 객체 생성 비용을 최적화할 수 있고, Proxy는 객체 접근 시 약간의 오버헤드를 발생시킬 수 있음

두 패턴은 각각 다른 문제를 해결하지만, 때로는 함께 사용될 수 있다. 예를 들어, Factory 패턴으로 생성된 객체에 대한 접근을 Proxy 패턴으로 제어할 수 있다.

profile
Computer Vision Engineer

0개의 댓글

관련 채용 정보