Proxy Pattern

윤세영·2023년 7월 6일
0

DesignPattern

목록 보기
2/15

사용 목적

실제 객체의 생성시간이 오래걸리는 경우 일을 분업하여 간단한 초기 작업을 프록시에서 하고,
가장 중요한 마지막 작업에서 프록시객체는 실제 객체를 생성하고 위임한다.

특징

  • 프록시는 실제 서비스와 같은 이름의 메소드를 인터페이스를 사용하여 구현한다.
  • 프록시는 실제 서비스에 대한 참조 변수를 갖는다.
  • 대리자는 실제 서비스의 같은 이름을 가진 메소드를 호출하고 그 값을 클라이언트에게 돌려준다.
  • 대리자는 실제 서비스의 메소드 호출 전후에도 별도의 로직을 수행할 수 있다.
원격프록시

로컬 환경에 존재하며, 원격객체(JVM의 Heap에 있는 객체)에 대한 대변자 역할을 하는 객체
서로 다른 주소 공간에 있는 객체에 대해 마치 같은 주소 공간에 있는 것처럼 동작하게 만드는 패턴

가상프록시

꼭 필요로 하는 시점까지 객체의 생성을연기하고, 해당 객체가 생성된 것처럼 동작하도록 만들고 싶을 때 사용하는 패턴

보호프록시

객체에 대한 접근 권한을 제어하거나 객체마다 접근 권한을 달리하고 싶을 때 사용하는 패턴으로
실객체에 대한 접근을 가로채어 중간에서 권한 점검을 수행

소스코드

  • 인터페이스
public interface Image {
    void display();
}
  • 프록시
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();
     }
 }
  • 실제
public class RealImage implements Image {
 
     private String fileName;
 
     public RealImage(String fileName){
         this.fileName=fileName;
         loadFromDisk(fileName);
     }
     private void loadFromDisk(String fileName){
         System.out.println("Loading " + fileName);
     }
     @Override
     public void display() {
         System.out.println("Displaying " + fileName);
     }
 }
  • 메인
public class Main {
     public static void main(String[] args){
         Image image = new ProxyImage("test.jpg");
         image.display();
     }
 }

결과화면

UML

profile
Frontend

0개의 댓글