CS(16) - 프록시패턴

gyungkyuBae·2023년 8월 16일
0

프록시패턴

프록시패턴이란 어떠한 객체에 대한 접근에 대한 흐름을 가로채서 접근을 필터링하거나 수정하는 등의
접근제어나 대리역할을 하는 디자인패턴입니다.

프록시패턴의 특징

접근 제어: 프록시를 사용하여 객체에 대한 접근을 제어할 수 있습니다. 예를 들어, 객체의 일부 메서드나 속성에 대한 접근을 제한하거나 특정 조건을 만족하지 않는 경우에만 접근을 허용할 수 있습니다.

지연 로딩: 실제로 필요한 시점까지 객체를 로딩하지 않고, 프록시를 사용해 필요한 시점에 실제 객체를 로딩하도록 할 수 있습니다. 이는 초기화나 부하가 큰 작업을 필요로 하는 객체의 경우 유용합니다.

캐싱: 프록시를 통해 요청한 내용을 캐싱하여 같은 요청에 대한 결과를 반복적으로 계산하지 않도록 할 수 있습니다. 이는 성능 향상을 위해 사용됩니다.

로그 기록: 프록시를 사용하여 객체에 대한 메서드 호출이나 상태 변경을 로그로 기록할 수 있습니다. 이를 활용해 디버깅이나 모니터링을 수행할 수 있습니다.

보안: 프록시를 사용하여 보안 검사를 수행하거나 접근 권한을 확인하는 등의 보안 기능을 추가할 수 있습니다.

프록시 패턴은 코드를 더 모듈화하고 유연하게 만들어주며, 객체의 접근 및 제어에 관한 로직을 프록시 객체로 분리함으로써 코드의 유지보수성을 향상시킬 수 있습니다.

JS에서의 프록시패턴 예시

// 실제 이미지 로딩을 담당하는 RealImage 클래스
class RealImage {
  constructor(filename) {
    this.filename = filename;
    this.loadImageFromDisk();
  }

  loadImageFromDisk() {
    console.log(`Loading image ${this.filename}`);
  }

  display() {
    console.log(`Displaying image ${this.filename}`);
  }
}

// 이미지 로딩을 프록시로 감싼 ProxyImage 클래스
class ProxyImage {
  constructor(filename) {
    this.filename = filename;
    this.realImage = null;
  }

  display() {
    if (!this.realImage) {
      this.realImage = new RealImage(this.filename);
    }
    this.realImage.display();
  }
}

// 클라이언트 코드
const image1 = new ProxyImage("image1.jpg");
const image2 = new ProxyImage("image2.jpg");

image1.display(); // 실제 이미지 로딩
image1.display(); // 이미 로딩되어서 바로 디스플레이
image2.display(); // 실제 이미지 로딩

RealImage 클래스와 ProxyImage 클래스를 사용하여 이미지 로딩을 다루고 있습니다. ProxyImage 클래스는 실제 이미지 로딩을 RealImage 클래스에 위임하면서, 이미지가 실제로 로딩되는 시점을 관리하고 필요한 경우만 로딩하는 역할을 합니다. 이를 통해 이미지 로딩이 필요한 시점까지 지연될 수 있습니다.

profile
개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 16일

좋은 글 감사합니다. 자주 올게요 :)

답글 달기