Proxy Pattern (프록시 패턴)
Proxy Pattern
프록시
1. 원격프록시 : 원격객체에 대한 접근을 제어
2. 가상프록시 : 생성하기 힘든 자원(ex. Image)에 대한 접근을 제어
3. 보호프록시 : 접근권한이 필요한 자원에 대한 접근을 제어
사용 목적
실제 객체의 생성시간이 오래걸리는 경우 일을 분업하여 간단한 초기 작업을 프록시에서 하고,
가장 중요한 마지막 작업에서 프록시객체는 실제 객체를 생성하고 위임한다.
특징
1. 프록시는 실제 서비스와 같은 이름의 메소드를 인터페이스를 사용하여 구현한다.
2. 프록시는 실제 서비스에 대한 참조 변수를 갖는다.
3. 대리자는 실제 서비스의 같은 이름을 가진 메소드를 호출하고 그 값을 클라이언트에게 돌려준다.
4. 대리자는 실제 서비스의 메소드 호출 전후에도 별도의 로직을 수행할 수 있다.
원격프록시
로컬 환경에 존재하며, 원격객체(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
'SW > DesignPattern' 카테고리의 다른 글
Compound Pattern (컴파운드 패턴) (0) | 2017.09.19 |
---|---|
State Pattern (스테이트 패턴) (0) | 2017.09.15 |
Composite Pattern (컴포지트 패턴) (0) | 2017.09.15 |
Iterator Pattern (반복자 패턴) (0) | 2017.09.14 |
Template Method Pattern (템플릿메소드패턴) (0) | 2017.09.11 |