Proxy Pattern 프록시 패턴
구조패턴으로 프록시 패턴은 다른 클래스의 기능을 대신하는 클래스입니다.
프록시 객체는 외부에서 원래 객체의 기능을 사용할 수 있는 인터페이스 역할을 합니다. 또한 프록시 객체에서 원래 객체의 기능을 사용하기 전후에 로직을 추가할 수도 있습니다.
Proxy의 종류
Virtual Proxy (가상 프록시) : 객체가 필요할 때 생성하기 / 지연 생성(초기화)
가끔 필요한 객체인데, 항상 메모리에 생성되어 있어서 시스템 자원 낭비가 있는 경우에 사용합니다. 프로그램이 실행될때 객체를 생성하지 않고, 객체가 필요해졌을 때 생성합니다.
Protection Proxy(보호 프록시) : 접근 제한
지정된 고객만이 서비스 객체에 접근할 수 있도록 접근 제한을 해야할 때 사용합니다.
Remote Proxy(원격 프록시) : 원격 서비스의 로컬 실행
서비스 객체가 원격 서버에 있을때 사용합니다. 프록시 객체는 네트워크와 관련된 복잡한 것들을 모두 처리한 뒤, 고객의 요청을 네트워크를 통해 서비스객체로 전달합니다.
Logging Proxy(로깅 프록시) : 로그 요청
서비스 객체의 요청을 이력으로 남겨야 할 때 사용합니다. 프록시 객체는 서비스가 실행되기 전에 요청에 대해 로그를 남기는 작업을 수행합니다.
Caching Proxy(캐싱 프록시) : 요청 결과 캐싱
고객의 요청 결과를 캐싱하고, 캐시의 라이프사이클을 관리해야 할 때 사용합니다. 매번 동일한 결과를 생성하는 요청이 반복되는 경우, 캐싱을 통해 결과를 구현할 수 있습니다.
Smart Reference (객체 참조)
프록시에서, 고객이 서비스를 사용할 때 사용하는 객체를 추적할 수 잇습니다. 만약 어떤 고객도 사용하지 않는 객체가 있다면 그 객체를 삭제할 수도 있습니다.
또 프록시는 고객이 서비스 객체를 변경했는지를 알 수 있습니다. 변경되지 않은 객체는 다른 고객들도 재사용할 수 있습니다.
장단점
장점
- 고객이 모르게 서비스 객체를 관리할 수 있습니다.
- 고객이 신경쓰지 않는 상태로, 서비스 객체의 라이프사이클을 관리할 수 있습니다.
- 프록시는 서비스 객체가 준비되지 않았거나, 사용할 수 없는 상태여도 작동합니다.
- 서비스나 고객을 변경하지 않고도 새로운 프록시를 추가할 수 있습니다. (개방폐쇄원칙)
단점
- 많은 양의 새로운 클래스를 추가해야하는 경우, 코드가 복잡해질 수 있습니다.
- 서비스 응답이 지연될 수 있습니다.
Proxy Pattern 프록시 패턴 구현
Shape
public interface Shape {
void draw();
}
Circle
public class Circle implements Shape{
public Circle() {
System.out.println("Before Draw");
}
@Override
public void draw() {
System.out.println("Draw Circle");
}
}
ShapeProxy
public class ShapeProxy implements Shape{
private Shape shape;
@Override
public void draw() {
if(null == shape){
shape = new Circle();
}
shape.draw();
}
}
Main
public class Main {
public static void main(String[] args) {
ShapeProxy shapeProxy = new ShapeProxy();
shapeProxy.draw();
shapeProxy.draw();
}
}
Before Draw
Draw Circle
Draw Circle
참조
'JAVA > DesignPattern' 카테고리의 다른 글
Design Pattern 디자인 패턴 Command Pattern 커맨드 패턴 (0) | 2021.12.22 |
---|---|
Design Pattern 디자인 패턴 Chain of Responsibility Pattern 책임체인패턴 (0) | 2021.12.21 |
Design Pattern 디자인 패턴 Flyweight Pattern 플라이웨이트 패턴 (0) | 2021.12.19 |
Design Pattern 디자인 패턴 Facade Pattern 파사드 패턴 (0) | 2021.12.18 |
Design Pattern 디자인 패턴 Decorator Pattern 데코레이터 패턴 (0) | 2021.12.18 |