프록시 패턴

어떤 객체에 직접 접근하지 않고, 대리 객체(Proxy)를 통해 접근하도록 만드는 구조 패턴

  • 프록시 객체: 실제 객체와 동일한 인터페이스를 구현하고, 접근 제어나 로깅, 캐싱, 지연 로딩 같은 부가 로직을 끼워넣는 역할

  • 지연 로딩: 실제 객체를 생성하는 비용이 큰 경우

    • 어떤 무거운 작업이 실제로 실행되어야 하는 시점까지 특정 객체의 생성을 지연시키기 위함

    • 객체를 생성하기 위해 큰 파일을 로드하거나, 네트워크로 전송받아야 한다면 필요한 시점에 로드하는것이 효율적

  • 접근 권한 제어: 보안상 민감한 기능을 가진 객체인 경우

    • 일반적으로 프록시 객체만 사용하도록 하고, 보안상 검증이 되었을 때에만 실제 객체에 접근 가능하도로록 함

  • 로깅 및 캐싱: 호출 전/후로 공통 로직이 필요할 때


1. 공통 인터페이스 (Subject)

interface Image {
  display(): void
}

2. 실제 객체 (Real Subject)

class RealImage implements Image {
  constructor(private filename: string) {
    this.loadFromDisk()
  }
  
  private loadFromDisk() {
    console.log(`Loading Image ${this.filename}`)
  }
  
  display() {
    console.log(`Displaying Image: ${this.filename}`)
  }
}

3. 프록시 객체

실제 객체를 감싸고, 필요시에만 실제 객체에 위임

4. 클라이언트 코드

Last updated