취업과 기본기 튼튼/빽 투더 기본기
[디자인 패턴 9편] 구조 패턴, 프록시(Proxy)
흠시
2020. 2. 23. 21:49
1. 개념
프록시 패턴은 프록시 객체를 통해 기본 객체에 접근하는 패턴이다.
1.1. 장점
- 기본 객체의 리소스가 무거운 경우, 프록시 객체에서 간단한 처리를 하거나 기본 객체를 캐싱 처리함으로써 부하를 줄일 수 있다.
- 기본 객체에 대한 수정 없이, 클라이언트에서의 사용과 기본 객체 사이에 일련의 로직을 프록시 객체를 통해 넣을 수 있다.
- 프록시는 기본 객체와 요청 사이에 있기 때문에, 일종의 방패(보안)의 역할도 한다.
- 구조나 코드 구현이 간단함.
1.2. 단점
- 프록시 객체가 중간에 껴있기 때문에, 간혹 응답이 느려질 수 있다. (캐싱이 안되어있는 초기 사용의 경우)
1.3. 활용 상황
- 기본 객체가 리소스 집약적인 경우. 자잘한 작업들은 프록시 객체가 처리하게 한다.
- 기본 객체에 접근을 제어해야하는 경우. 프록시 객체가 권한에 따라 접근 로직을 다르게 처리하게 한다.
2. 구조
- Subject
- Proxy 와 RealSubject 가 구현해야하는 인터페이스
- 두 객체를 동일하게 다루기 위해 존재
- Proxy
- RealSubect 와 Client 요청 사이에 존재하는 객체
- Subject 를 구현함으로써 클라이언트는 RealSubject 사용하는 것과 별 차이가 없어야 한다.
- RealSubject
- 실질적으로 요청에 대해 주된 기능을 수행하는 객체
- Proxy 객체는 내부적으로 이 객체를 로직에 맞게 사용한다. (위임)
3. 구현
Limky 님 블로그에 구현이 가장 간단하고 직관적이게 잘 되어 있어서 링크만 첨부한다.
프록시 패턴이 사용되는 다양한 예들이 보이는데, 내가 생각한 가장 핵심은
Client -> Proxy -> RealSubject
로 구성된 구조라는 것.
생각보다 되게 간단한 패턴이자, 활용 범위가 넓은 패턴인 듯 하다.