[ 목차 ]
안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 프록시(Proxy) 패턴입니다.
1. 프록시(Proxy) 패턴 이란?
프록시 패턴은 객체의 대리자 또는 객체에 대한 참조를 제공하여 실제 객체의 내부 로직을 감추는 구조적 디자인 패턴입니다. 프록시 객체는 클라이언트와 직접 상호작용하지만, 클라이언트가 실제 객체의 상태 변경이나 기능 호출을 할 때 실제 객체에 요청을 위임합니다.
2. 프록시(Proxy) 패턴 구현 방법
프록시 패턴은 다음 요소들을 통해 구현됩니다.
- Subject 인터페이스: 원래 객체와 프록시 객체에서 구현해야 하는 동일한 인터페이스입니다.
- RealSubject 클래스: Subject 인터페이스를 구현하는 실제 객체입니다.
- Proxy 클래스: Subject 인터페이스를 구현하면서 RealSubject에 대한 참조가 포함되어 있는 클래스입니다. 이 클래스는 실제 객체를 참조하여 메소드 호출을 위임하고, 몇몇 메소드는 추가 기능을 제공할 수도 있습니다.
// Subject 인터페이스
public interface Image {
void display();
}
// RealSubject 클래스
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName) {
this.fileName = fileName;
loadImage();
}
private void loadImage() {
System.out.println("Loading " + fileName);
}
@Override
public void display() {
System.out.println("Displaying " + fileName);
}
}
// Proxy 클래스
public class ProxyImage implements Image {
private String fileName;
private RealImage realImage;
public ProxyImage(String fileName) {
this.fileName = fileName;
}
@Override
public void display() {
if (realImage == null) {
realImage = new RealImage(fileName);
}
realImage.display();
}
}
// 클라이언트 코드
public class Main {
public static void main(String[] args) {
// 프록시를 사용한 경우
Image proxyImage = new ProxyImage("example.jpg");
proxyImage.display(); // 이미지 로딩 후 출력
proxyImage.display(); // 이미지를 캐시에 있으므로 로딩 없이 출력
}
}
3. 프록시(Proxy) 패턴의 장단점
3.1. 장점
- 실제 객체를 보호하고 내부 로직을 감추는 데 도움이 됩니다.
- 객체의 생성 비용이 클 때 프록시 객체를 통해 메모리 사용량과 성능을 향상시킬 수 있습니다.
- 클라이언트와 실제 객체 간의 결합도를 낮춰 유연한 설계를 가능하게 합니다.
3.2. 단점
- 추가적인 프록시 객체가 추가되는 영향으로 인해 코드의 복잡도가 증가할 수 있습니다.
- 요청 처리 과정에 프록시 객체를 거치기 때문에 응답 속도가 느려질 수 있습니다.
4. 프록시(Proxy) 패턴의 활용 예
프록시 패턴은 다양한 상황에서 사용할 수 있습니다. 예를 들면:
- Virtual Proxy: 높은 연산 비용이나 메모리 사용량이 예상되는 객체를 보호하고 필요한 경우에만 초기화합니다(예: 이미지 로딩).
- Remote Proxy: 원격 객체에 대한 로컬 인터페이스를 제공하여 클라이언트에 대한 요청을 원격 객체로 위임합니다(예: 원격 서비스 호출).
- Access Proxy: 보안 기능을 제공하여 실제 객체의 접근을 제한합니다(예: 인증 및 인가).
이러한 예제 중 프록시 패턴의 내부 구조와 사용 방법은 상황에 따라 다를 수 있지만, 기본 설계 방식은 동일합니다.
2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴
2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴
2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴
2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴
2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴
2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴
'JAVA' 카테고리의 다른 글
JAVA 디자인패턴 - 스트래티지(Strategy) 패턴 (0) | 2023.07.15 |
---|---|
JAVA 디자인 패턴 - 커맨드(Command) 패턴 (0) | 2023.07.14 |
JAVA 디자인패턴 - 데코레이터(Decorator) 패턴 (0) | 2023.07.13 |
JAVA 디자인패턴 - 옵저버(Observer) 패턴 (0) | 2023.07.13 |
JAVA 디자인패턴 - 비지터(Visitor) 패턴의 정의, 장점, 구현 (0) | 2023.07.12 |
댓글