디자인 패턴

Proxy 패턴

가든_ 2022. 9. 12. 00:42

구조패턴(Structual Patterns)

클래스나 객체를 조합해 더 큰 구조를 만드는 패턴


프록시 패턴

구조 패턴 중 하나

이미 존재하는 객체의 흐름을 제어하고자 할 때 사용

  • (예시)객체 생성 카운팅
  • 긴 시간이 필요한 작업에 대한 사전 처리
  • 지연로딩

장점

사이즈가 큰 객체(ex:이미지, 동영상)가 로딩되기 전에도 프록시를 통해 참조를 할 수 있다.

실제 객체의 public, protected 메소드들을 숨기고 인터페이스를 통해 노출시킬수있다.

로컬에 있지 않고 떨어져 있는 객체를 사용할 수 있다.

기존 객체에 대한 수정 없이, 원래 객체의 접근에 대해서 사전처리를 할 수 있다.

구조나 코드 구현이 간단하다

단점

객체를 생성할때 한단계를 거치게 되므로, 빈번한 객체 생성이 필요한 경우 성능이 저하될 수 있다.

프록시 내부에서 객체 생성을 위해 스레드가 생성, 동기화가 구현되야하는 경우 성능이 저하될 수 있다.

로직이 난해해져 가독성이 떨어질 수 있다.


디자인 패턴 테이블

subject

→ Proxy와 RealSubject가 구현해야하는 인터페이스

→ 두 객체를 동일하게 다루기 위해 존재

Proxy

→ RealSubject와 Client 요청 사이에 존재하는 객체

→ Subject를 구현함으로써 클라이언트는 RealSubject를 사용하는 것과 별 차이가 없어야한다.

RealSubject

→ 실질적으로 요청에 대해 주된 기능을 수행하는 객체

→ Proxy 객체는 내부적으로 이 객체를 로직에 맞게 사용한다.(위임)


C++ 구현코드