Proxy : 대리인, 대용물
영단어 Proxy의 의미처럼 프록시 패턴은 무언가를 대신 처리해주는 역할이라고 이해하면 된다!
💡 어떤 객체를 사용하려고 할 때, 객체를 직접적으로 참조 하는 것이 아니라 그 객체를 대신(proxy)하는 객체를 통해 접근하는 방식
대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴
→ 프록시에게 어떤 일을 대신 시키는 것
# ex. 해상도가 아주 높은 이미지 처리해야하는 경우
# 실제로 이미지를 display 할 때만 RealImage 사용하도록 구현
import time
from abc import ABC, abstractmethod
class Image(ABC):
def __init__(self):
self.filename = None
@abstractmethod
def display(self):
pass
class RealImage(Image):
def __init__(self, filename):
self.filename = filename
self.load_from_disk()
# 생성 시 디스크에서 파일 로드해옴 → 오래 걸림!
def load_from_disk(self):
print(f'loading {self.filename}')
time.sleep(1000)
def display(self):
print(f'displaying {self.filename}')
class ProxyImage(Image):
def __init__(self, filename):
self.filename = filename
self.real_image = None
def display(self):
if self.real_image is None:
self.real_image = RealImage(self.filename)
# RealImage에 직접 접근하지 않고 ProxyImage 통해 접근
self.real_image.display()
proxy_image = ProxyImage('hello.png')
proxy_image.display()
# 실제 사용 시점에서 이미지 로드
Reference ✍
[Design Pattern] 프록시 패턴(Proxy Pattern)에 대하여
[디자인패턴][Proxy] 프록시 패턴
파이썬으로 작성된 프록시