Java Design Pattern - Proxy Pattern

업데이트:

Design Pattern

  • 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.

Structural Patterns, 구조 패턴

  • 클래스와 객체를 더 큰 결과물로 합칠 수 있는 구조로 설계하는 패턴이다.
  • 서로 다른 인터페이스를 지닌 여러 개의 객체를 조합하여 단일 인터페이스를 제공하거나, 객체들을 서로 묶어 새로운 기능을 제공하는 패턴이다.

Proxy Pattern

  • 어떤 다른 객체로 접근하는 것을 통제하기 위해서 그 객체의 대리자나 자리표시자의 역할을 하는 패턴이다.

Example

public interface Image {

  void display();

}
public class RealImage implements Image {

  private String fileName;

  public RealImage(String fileName) {
    this.fileName = fileName;
    loadFromDisk(fileName);
  }

  @Override
  public void display() {
    System.out.println("Displaying " + fileName);
  }

  private void loadFromDisk(String fileName) {
    System.out.println("Loading " + fileName);
  }

}
public class ProxyImage implements Image {

  private RealImage realImage;
  private String fileName;

  public ProxyImage(String fileName) {
    this.fileName = fileName;
  }

  @Override
  public void display() {
    if (realImage == null) {
      realImage = new RealImage(fileName);
    }
    realImage.display();
  }

}
  • 실제 Image 정보를 저장할 RealImage 클래스와 RealImage 정보를 저장하여 관리하는 ProxyImage 객체를 생성한다.
public class ProxyPatternMain {

  public static void main(String[] args) {
    Image image = new ProxyImage("test_10mb.jpg");

    // Image will be loaded from disk
    image.display();

    // Image will not be loaded from disk
    image.display();
  }

}
  • ProxyImage 클래스로 Image를 생성하고 display() Method를 반복 호출하면 처음의 경우 RealImage를 통해 정보를 가져오지만, 그 이후부터는 ProxyImage에 저장된 정보를 반환한다.

Source

Sample Code는 여기에서 확인 가능합니다.

댓글남기기