프록시 = 대리자, 대변인
어떤 객체를 사용하고자 할 때, 객체를 직접적으로 참조하지 않고, 해당 객체를 대항하는 객체를 통해 대상 객체에 접근하는 방식을 사용 -> 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조 혹은 설정할 수 있음, 실제 객체의 기능이 필요한 시점까지 객체 생성 미루기 가능
텍스트와 이미지가 같이 로딩되어야하는 페이지
// Image.java (interface)
public interface Image {
public void displayImage();
}
// Real_Image.java
public class Real_Image implements Image {
private String fileName;
public Real_Image(String fileName) {
this.fileName = fileName;
loadFromDisk(fileName);
}
private void loadFromDisk(String fileName) {
System.out.println("로딩: " + fileName);
}
@Override
public void displayImage() {
System.out.println("보여주기: " + fileName);
}
}
// Proxy_Image.java
public class Proxy_Image implements Image {
private String fileName;
private Real_Image realImage;
public Proxy_Image(String fileName) {
this.fileName = fileName;
}
@Override
public void displayImage() {
if (realImage == null) {
realImage = new Real_Image(fileName);
}
realImage.displayImage();
}
}
// Proxy_Main.java
public class Proxy_Pattern {
public static void main(String args[]) {
Image image1 = new Proxy_Image("test1.jpg);
Image image2 = new Proxy_Image("test2.jpg);
image1.displayImage();
System.out.println();
image2.displayImage();
}
}
로딩: test1.png
보여주기: test1.png
로딩: test2.png
보여주기: test2.png