프록시 패턴 (Proxy Pattern)
개요
프록시 패턴은 객체 지향 디자인 패턴 중 하나로, 객체 간의 접근을 제어하기 위해 중간에 대리자 역할을 수행하는 패턴이다. 프록시 클래스는 실제 클래스와 같은 인터페이스를 구현하므로 클라이언트는 프록시 객체를 통해 실제 객체에 접근할 수 있다.
사용 시나리오
프록시 패턴은 다음과 같은 경우에 사용된다.
•
원격지에 있는 객체에 접근해야 할 때
•
생성에 많은 비용이 드는 객체의 경우
•
객체에 대한 접근 권한을 제어할 필요가 있을 때
구성 요소
프록시 패턴은 다음과 같은 구성 요소로 이루어진다.
서브젝트 (Subject)
실제 서비스의 인터페이스를 정의하는 역할을 한다. 프록시와 실제 객체가 공유하는 인터페이스이다.
프록시 (Proxy)
서브젝트와 같은 인터페이스를 구현하며, 실제 객체에 대한 참조를 가지고 있다. 클라이언트로부터 요청을 받아 실제 객체에 전달하고, 실제 객체로부터 받은 결과를 클라이언트에게 반환한다.
리얼 서브젝트 (Real Subject)
서브젝트의 실제 구현체이다. 프록시가 리얼 서브젝트의 인스턴스를 가지고 있으며, 실제 작업을 처리한다.
예제
다음은 자동차 판매 시스템에서 프록시 패턴을 사용한 예제이다.
public interface Car {
void sellCar();
}
public class RealCar implements Car {
@Override
public void sellCar() {
System.out.println("Car is sold.");
}
}
public class CarProxy implements Car {
private RealCar realCar;
@Override
public void sellCar() {
if (realCar == null) {
realCar = new RealCar();
}
realCar.sellCar();
}
}
Plain Text
복사
위 예제에서 Car 인터페이스는 서브젝트를 나타내고, RealCar 클래스는 리얼 서브젝트를, CarProxy 클래스는 프록시를 나타낸다. CarProxy 클래스는 RealCar 클래스를 참조하며, sellCar() 메서드를 호출하면 실제 객체인 RealCar의 sellCar() 메서드를 호출한다.
참고 자료
•
Head First Design Patterns (미리보기: https://www.oreilly.com/library/view/head-first-design/0596007124/)
•