Spring/additional

[디자인 패턴] Proxy Pattern(프록시 패턴)

sujin7837 2021. 2. 21. 17:06
반응형

프록시 패턴에 대한 자세한 설명은 다음 글을 참고하세요. Proxy Pattern(프록시 패턴)

 

[Spring] 스프링이 사랑한 디자인 패턴1

[개요] 스프링이 사랑한 디자인 패턴1 1. Adapter Pattern(어댑터 패턴) 2. Proxy Pattern(프록시 패턴) 3. Decorator Pattern(데코레이터 패턴) 스프링이 사랑한 디자인 패턴2 1. Singleton Pattern(싱글턴 패턴)..

sujin7837.tistory.com

프록시 패턴의 예시: 이미지

 

구현하려는 로직

-Image 인터페이스와 Image 인터페이스를 구현하는 구체적인 클래스들을 만듭니다.

-ProxyImage는 RealImage 객체 로딩의 메모리 공간을 줄이기 위한 프록시 클래스입니다.

-demo class로 활용할 ProxyPatternDemo는 필요에 따라 Image 객체를 로딩하고 표시하기 위한 ProxyImage를 사용할 것입니다.

 

구현 단계

[1단계]

인터페이스를 만듭니다.

//Image.java

public interface Image {
   void display();
}

 

[2단계]

동일한 인터페이스를 구현하는 클래스를 만듭니다.

//RealImage.java

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);
   }
}
//ProxyImage.java

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();
   }
}

 

[3단계]

필요한 경우 RealImage 클래스의 객체를 얻기 위해 ProxyImage를 사용합니다.

//ProxyPatternDemo.java

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

      //image will be loaded from disk
      image.display(); 
      System.out.println("");
      
      //image will not be loaded from disk
      image.display(); 	
   }
}

 

[4단계]

출력 확인

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg

 

 

반응형