본문 바로가기

취업과 기본기 튼튼/빽 투더 기본기

[디자인 패턴 9편] 구조 패턴, 프록시(Proxy)

1. 개념

프록시 패턴은 프록시 객체를 통해 기본 객체에 접근하는 패턴이다.

1.1. 장점

  • 기본 객체의 리소스가 무거운 경우, 프록시 객체에서 간단한 처리를 하거나 기본 객체를 캐싱 처리함으로써 부하를 줄일 수 있다.
  • 기본 객체에 대한 수정 없이, 클라이언트에서의 사용과 기본 객체 사이에 일련의 로직을 프록시 객체를 통해 넣을 수 있다.
  • 프록시는 기본 객체와 요청 사이에 있기 때문에, 일종의 방패(보안)의 역할도 한다.
  • 구조나 코드 구현이 간단함.

1.2. 단점

  • 프록시 객체가 중간에 껴있기 때문에, 간혹 응답이 느려질 수 있다. (캐싱이 안되어있는 초기 사용의 경우)

1.3. 활용 상황

  • 기본 객체가 리소스 집약적인 경우. 자잘한 작업들은 프록시 객체가 처리하게 한다.
  • 기본 객체에 접근을 제어해야하는 경우. 프록시 객체가 권한에 따라 접근 로직을 다르게 처리하게 한다.

2. 구조

출처 : https://ko.wikipedia.org/wiki/프록시_패턴

  • Subject
    • Proxy 와 RealSubject 가 구현해야하는 인터페이스
    • 두 객체를 동일하게 다루기 위해 존재
  • Proxy
    • RealSubect 와 Client 요청 사이에 존재하는 객체
    • Subject 를 구현함으로써 클라이언트는 RealSubject 사용하는 것과 별 차이가 없어야 한다.
  • RealSubject
    • 실질적으로 요청에 대해 주된 기능을 수행하는 객체
    • Proxy 객체는 내부적으로 이 객체를 로직에 맞게 사용한다. (위임)

3. 구현

Limky 님 블로그에 구현이 가장 간단하고 직관적이게 잘 되어 있어서 링크만 첨부한다.

불러오는 중입니다...

프록시 패턴이 사용되는 다양한 예들이 보이는데, 내가 생각한 가장 핵심은

Client -> Proxy -> RealSubject

로 구성된 구조라는 것.
생각보다 되게 간단한 패턴이자, 활용 범위가 넓은 패턴인 듯 하다.

4. 참고