프런트엔드/디자인 패턴

[7일차] 프록시 | 구조 패턴 7일만에 끝내기 챌린지 - GoF 디자인 패턴

조드래곤나인 2023. 7. 16. 14:55

 

출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『Gof의 디자인 패턴』. 김정아(역). 프로텍미디어, 2015.

 

 

[7일차] 프록시(Proxy)
구조 패턴 7일만에 끝내기 챌린지 - GoF 디자인 패턴

타입스크립트로 설명하는 GoF 디자인 패턴의 구조 패턴 7일만에 끝내기 챌린지

 

 

프록시란?

다른 객체에 대한 접근을 제어하기 위한
대리자 또는 자리체움자 역할을 하는 객체를 둔다.

어떤 객체에 대한 접근을 제어하는 이유는

실제로 그 객체를 사용할 수 있을 때까지

객체 생성과 초기화에 들어가는 비용 및 시간을 묻지 않겠다는 것이다.

 

 

활용성

Remote Proxy는 서로 다른 주소 공간에 존재하는 객체를 가리키는
대표 객체로, 로컬 환경에 위치한다.

Virtual Proxy는 요청이 있을 때만 필요한 고비용 객체를 생성한다.

 

Protection Proxy는 원래 객체에 대한 실제 접근을 제어한다.

이는 객체 별로 접근 제어 권한이 다를 때 유용하게 사용할 수 있다.

 

Smart Reference는 원시 포인터의 대채용 객체로,

실제 객체에 접근이 일어날 때 추가적인 행동을 수행한다.

 

 

구조 및 구현

Proxy클래스는 자신이 받을 요청을 RealSubject객체에 전달한다.

interface Subject {
    request(): void
}

class RealSubject implements Subject {
    request() {}
}

class ProxySubject implements Subject {
    realSubject: Subject
    constructor(subject: Subject) {
        this.realSubject = subject
    }
    request() {
        this.realSubject.request()
    }
}
 
class Main {
    subject: Subject
    constructor() {
        this.subject = new RealSubject()
        this.subject.request()
    }
}

// Proxy 사용
class Main {
    subject: Subject
    constructor() {
        const realSubject = new RealSubject()
        this.subject = new ProxySubject(realSubject)
        this.subject.request()
    }
}
 

 


 

 

공식 기술블로그 링크

 

더넥스트웹리서치랩

웹 클라이언트 기술을 전문적으로 연구하고 자료를 발행하는 기술 블로그를 운영합니다.

the-next-web-research-lab.github.io

 

728x90