프록시 패턴(Proxy Pattern)은 다른 객체에 대한 대리자(대변인)를 제공해 접근 제어, 지연 로딩, 로깅, 캐싱 등을 추가하는 구조 패턴이다.
프록시 종류
| 종류 | 용도 |
|---|
| 가상 프록시 | 무거운 객체 지연 초기화 |
| 보호 프록시 | 접근 권한 제어 |
| 원격 프록시 | 원격 객체 대리 (RPC) |
| 캐싱 프록시 | 결과 캐싱 |
| 로깅 프록시 | 접근 로깅 |
python
from abc import ABC, abstractmethod
import functools
class Image(ABC):
@abstractmethod
def display(self): pass
class RealImage(Image):
def __init__(self, filename: str):
self.filename = filename
self._load() # 무거운 작업
def _load(self):
print(f"디스크에서 로딩: {self.filename}")
def display(self):
print(f"표시: {self.filename}")
# 가상 프록시 (지연 로딩)
class ImageProxy(Image):
def __init__(self, filename: str):
self.filename = filename
self._real = None
def display(self):
if self._real is None:
self._real = RealImage(self.filename)
self._real.display()
# 캐싱 프록시 (데코레이터로 구현)
class CachingProxy:
def __init__(self, service):
self._service = service
self._cache = {}
def fetch(self, url: str):
if url not in self._cache:
self._cache[url] = self._service.fetch(url)
return self._cache[url]
img = ImageProxy("large_photo.jpg")
# 이 시점에 로딩 없음
img.display() # 여기서 실제 로딩
img.display() # 재사용
관련 개념