관련 코드는 5장. 프록시 패턴 - 객체 접근 제어를 참조
5장. 프록시 패턴 - 객체 접근 제어
5.1 프록시 디자인 패턴의 개요
프록시(proxy)
요청자와 공급자 사이의 중재자
5.1.1 Proxy 클래스
- 객체의 인터페이스 역할
- 객체 클래스의 구현과 상관없이 감싸려는 객체에 대한 기능을 제공
- 실제 객체에 접근할 수 있는 대리 객체나 껍데기를 제공
5.1.2 프록시 패턴의 역할
- 복잡한 시스템을 간단하게 표현
- 객체에 대한 보안을 제공(클라이언트로부터 객체를 보호)
- 다른 서버에 존재하는 외부 객체에 대한 로컬 인터페이스를 제공
- 메모리 사용량이 높은 객체를 다루는 가벼운 핸들러 역할
- 의도치 않은 케이스로부터 객체를 보호
5.2 프록시 패턴의 구성
- Proxy
실 객체에 접근할 수 있는 reference를 유지
Subject와 동일한 인터페이스 구조를 가지기 때문에 실 객체를 대체할 수 있음
RealSubject 클래스의 접근을 제어하는 클래스로 RealSubject의 생성과 소멸을 담당(composition) - Subject
RealSubject와 Proxy를 정의하는 인터페이스 - RealSubject
Proxy가 대체하는 실 객체
Client가 사용할 기능을 제공 - Client
작업을 수행하기 위해 Proxy 클래스에 접근
5.3 프록시의 여러 유형들
5.3.1 가상 프록시(Virtual Proxy)
인스턴스화하기엔 무거운 객체의 placeholder 역할을 담당
클라이언트가 객체를 처음 요청하거나 접근했을 때 실 객체를 생성
ex) 웹 사이트에서 큰 이미지를 불러오는 경우, 사용자가 아이콘을 클릭하기 전까지 이미지가 있음을 표시하는 아이콘을 표시
5.3.2 원격 프록시(Remote Proxy)
원격 서버나 다른 주소 공간에 존재하는 객체에 대한 로컬 인스턴스를 생성
ex) 다수의 서버들로 이루어진 애플리케이션의 모니터링 시스템을 구성하는 경우, 원격 객체를 로컬에서 제어할 수 있는 원격 프록시 객체를 생성하여 관리
5.3.3 보호 프록시(Protective Proxy)
RealSubject의 중요한 부분에 대한 접근을 제어
ex) 사용자가 요청에 대한 권한이 있는지 확인
5.3.4 스마트 프록시(Smart Proxy)
사용자가 객체에 접근했을 때 수행될 행동을 추가
ex) 리소스 공유를 위해 객체의 잠금 상태를 확인하는 기능을 추가로 수행하여 접근을 제어
5.4 프록시 패턴의 장점
- 무거운 객체 특히 자주 사용되는 객체를 캐싱해 성능을 향상
- RealSubject에 대한 접근 요청을 인증하여 보안을 유지
- 원격 프록시는 원격 서버 간의 네트워크 연결과 DB 연결 구현에 적합하며 시스템 모니터링 용도로 사용될 수 있음
PREVIOUSEtc