티스토리 뷰

프록시 proxy ?

대리, 대리(행위)나 대리권, 대리 투표, 대리인 등을 뜻한다.

 

프록시 패턴(proxy pattern)

프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스인데, 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용한다고 한다. 또 프록시 객체로 쓰이기도 하지만 프록시 서버로도 활용된다고 한다.

 

아래 이미지를 보면 Aunty가 Bride 대신 모든 것을 처리해주고있는데 프록시가 이러한 역활을 한다고 보면 조금 쉽게 생각할 수 있는 것 같다.. (그래도 어려움🙄)

(출처: https://medium.com/@mithunsasidharan/understanding-the-proxy-design-pattern-5e63fe38052a)

(출처: https://medium.com/@mithunsasidharan/understanding-the-proxy-design-pattern-5e63fe38052a)

 

 

아래 프록시 패턴 예제는 위키백과에 나와있다.

import java.util.*;

interface Image {
    public void displayImage();
}

//on System A
class RealImage implements Image {
    private String filename;
    public RealImage(String filename) {
        this.filename = filename;
        loadImageFromDisk();
    }

    private void loadImageFromDisk() {
        System.out.println("Loading   " + filename);
    }

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

//on System B
class ProxyImage implements Image {
    private String filename;
    private Image image;

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

    @Override
    public void displayImage() {
        if (image == null)
           image = new RealImage(filename);

        image.displayImage();
    }
}

class ProxyExample {
    public static void main(String[] args) {
        Image image1 = new ProxyImage("HiRes_10MB_Photo1");
        Image image2 = new ProxyImage("HiRes_10MB_Photo2");

        image1.displayImage(); // loading necessary
        image2.displayImage(); // loading necessary
    }
}

/* 실행 결과
Loading    HiRes_10MB_Photo1
Displaying HiRes_10MB_Photo1
Loading    HiRes_10MB_Photo2
Displaying HiRes_10MB_Photo2
*/

 

 

 

 

댓글