본문 바로가기
디자인패턴

디자인패턴 - 프록시 패턴

by KBS 2024. 2. 18.
728x90

프록시 패턴

  • 구조 패턴 카테고리
  • 하나의 대상 객체 또는 주제객체가 있을때, 클라이언트는 바로 해당 객체에 접근하지 않고 proxy 객체를 통해 접근하는 패턴
  • proxy는 실제 객체와 클라이언트 사이에 존재한다.

필요한 이유

  • 접근 권한 제어
  • 데이터 로그 로깅 제어
  • 은행 카드

구성요소

  • Client 사용자
  • Subject 인터페이스
  • Proxy 대리인
  • Real Subject 실제 객체

코드

// subject 인터페이스
interface Payment {
  request(amout: number): void;
}

// real subject
class Cash implements Payment {
  request(amount: number) {
    console.log(`결제 요청 완료... 금액 : ${amount}`);
  }
}

const targetObject = new Cash();

// proxy(실제 객체, 요청 처리 핸들러) js 에서 지원하는 Proxy 를 사용하여 구현
const paymentProxy = new Proxy(targetObject, {
  get: (object, prop) => {
    // object: 해당 객체 참조
    // prop : 구현하는 인터페이스의 메서드
    if (object[prop]) {
      return object[prop];
    }
    throw new Error("operation not implemented");
  },
});


paymentProxy.request(100);
// 결제 요청 완료... 금액 : 100

paymentProxy.add(100);
// Error : "operation not implemented"
728x90

댓글