Proxy 패턴은 다른 객체에 대한 접근을 제어하기 위해 그 객체의 대리물 또는 대용물을 제공합니다. proxy는 실제 객체와 동일한 인터페이스를 가지지만, 실제 객체에 위임하기 전에 행위 — 지연 로딩, 접근 제어, 캐싱, 로깅 같은 — 를 추가합니다.
Proxy 패턴이 하는 일
PROXY → 다른 객체를 대신하여 그 객체에 대한 접근을 제어하는 객체:
→ 실제 객체와 동일한 인터페이스 (클라이언트가 투명하게 사용)
→ 실제 객체에 위임하기 전/주위에 행위를 추가
→ 실제 객체가 언제 그리고 어떻게 접근되는지 제어
→ "제어/행위를 추가하는 대역"
proxy의 유형
가상(VIRTUAL) proxy → 지연 초기화 → 필요할 때만 실제 객체를 생성/로드
(예: 첫 사용 전까지 무거운 자원 로딩을 미룸)
보호(PROTECTION) proxy → 접근 제어 → 접근을 허용하기 전에 권한 확인
캐싱(CACHING) proxy → 결과를 캐시 → 다시 가져오거나 재계산하는 대신 캐시된 데이터 반환
원격(REMOTE) proxy → 다른 위치의 객체를 나타냄 (네트워크/원격 호출이 숨겨짐)
로깅/스마트 proxy → 접근 주위에 로깅, 참조 카운팅 등을 추가
