Lined Notebook

프록시패턴 ★★★

by yjym33

1. 프록시 패턴의 개념

프록시 패턴은 객체 지향 프로그래밍에서 사용되며, 하나의 객체가 다른 객체에 대한 대리자 역할을 수행합니다. 주로 다음과 같은 상황에서 사용됩니다.

  • 원격 객체에 접근할 때
  • 비용이 큰 객체 생성 및 초기화를 지연시킬 때
  • 객체에 대한 접근을 제어하고 보안을 강화할 때

 

2. 프록시 패턴의 구성 요소

 

프록시 패턴은 주로 세 가지 구성 요소로 이루어집니다:

 

  • 실제 객체 (Real Subject): 실제 기능을 구현하는 객체입니다. 프록시 객체가 대신할 대상입니다.
  • 프록시 (Proxy): 실제 객체와 동일한 인터페이스를 구현하면서 실제 객체에 대한 접근을 제어하는 객체입니다.
  • 클라이언트 (Client): 프록시를 사용하여 실제 객체에 접근하는 객체입니다. 클라이언트는 프록시를 통해 실제 객체의 메서드 호출 및 상호작용을 수행합니다.

 

3. 프록시 패턴의 활용 예제

 

  • 가상 프록시 (Virtual Proxy): 이미지나 비디오 스트리밍과 같이 비용이 많이 드는 자원을 필요할 때만 생성하고 초기화하는 경우에 사용됩니다.
  • 보호 프록시 (Protection Proxy): 객체에 접근 제어를 추가하여 보안을 강화합니다. 예를 들어, 파일 시스템 객체에 대한 접근을 허용하거나 거부할 수 있습니다.
  • 원격 프록시 (Remote Proxy): 원격 서버에 있는 객체에 로컬에서 접근할 때 사용됩니다. 원격 서비스 호출을 추상화하고 네트워크 통신을 처리합니다.

 

 

다음은 프록시가 활용되는 원격 프록시 (Remote Proxy)를 사용하여 원격 서비스에 접근하는 예제입니다.

 

 

실제 서비스 객체

// 실제 서비스 객체

public interface RemoteService {
    void request();
}

public class RealService implements RemoteService {
    @Override
    public void request() {
        System.out.println("실제 서비스 객체에서 요청을 처리합니다.");
    }
}

프록시 객체

// 프록시 객체
// 프록시 객체는 실제 서비스 객체에 대한 접근을 제어하고 추가 기능을 제공합니다.

public class ProxyService implements RemoteService {
    private RealService realService;

    @Override
    public void request() {
        // 실제 서비스 객체가 초기화되지 않았다면 초기화합니다.
        if (realService == null) {
            realService = new RealService();
        }

        // 추가적인 작업을 수행할 수 있습니다.
        System.out.println("프록시에서 추가적인 작업을 수행합니다.");

        // 실제 서비스 객체에 요청을 전달합니다.
        realService.request();
    }
}

 

 

클라이언트 코드 

// 클라이언트 코드

public class Client {
    public static void main(String[] args) {
        RemoteService serviceProxy = new ProxyService();

        // 클라이언트는 프록시를 통해 서비스에 접근합니다.
        serviceProxy.request();
    }
}

 

이 예제에서 ProxyService는 실제 서비스 객체 RealService에 대한 접근을 제어하고, 필요한 경우에만 실제 서비스 객체를 초기화합니다. 클라이언트 코드는 프록시 객체를 통해 서비스에 접근하므로, 프록시를 사용하여 원격 서비스 호출을 추상화하고 추가 기능을 제공할 수 있습니다.

'Development > CS' 카테고리의 다른 글

flux패턴 ★★★  (0) 2023.09.26
MVC패턴, MVP패턴, MVVM패턴 ★★★  (0) 2023.09.26
전략패턴 ★★★  (0) 2023.09.25
DI와 DIP ★★★  (0) 2023.09.25
팩토리 패턴 ★★★  (0) 2023.09.25

블로그의 정보

생각보다 실천을

yjym33

활동하기