Proxy
Proxy 패턴은 클라이언트와 실제 객체(Real Subject) 사이에 대리자(Proxy)를 두어, 클라이언트가 직접 실제 객체에 접근하지 않고 Proxy를 통해 접근하도록 하는 패턴입니다.
┌─────────┐
│ Client │
└────┬────┘
│
▼
┌────────────────┐
│ Proxy │
│ (부가 기능 적용)│
└────┬────┬─────┘
│ │
│ │ 위임 (Delegation)
▼ ▼
┌─────────┐ ┌────────────┐
│ Real │ │ 부가 기능 │
│ Subject │ │ (로깅, 캐싱 등) │
└─────────┘ └────────────┘
이를 통해 접근 제어나 추가 기능(로깅, 캐싱, 권한 검사 등)을 쉽게 구현할 수 있습니다.
How do code
// Specification: Proxy 패턴은 실제 객체에 대한 접근을 제어하거나 부가 기능을 추가하기 위해 사용됩니다.
// Service 인터페이스
public interface Service {
String operation();
}
// 실제 객체 (Real Subject)
public class RealService implements Service {
@Override
public String operation() {
return "실제 서비스의 동작 결과";
}
}
// Proxy 객체
public class ServiceProxy implements Service {
private Service realService;
public ServiceProxy() {
// 실제 객체를 생성하거나 주입합니다.
this.realService = new RealService();
}
@Override
public String operation() {
// 호출 전 부가 기능 (예: 로깅)
System.out.println("Proxy: operation() 호출 전");
// 실제 객체에 위임
String result = realService.operation();
// 호출 후 부가 기능 (예: 결과 캐싱)
System.out.println("Proxy: operation() 호출 후");
return result;
}
}
이와 같이 Proxy 패턴은 클라이언트와 실제 객체 사이에서 중개자 역할을 수행하며, 추가적인 기능(예: 로깅, 캐싱, 보안 검사 등)을 쉽게 적용할 수 있도록 돕습니다.
Last updated