프록시 Proxy
🙈

프록시 Proxy

Created
Apr 24, 2024 04:30 AM
Last edited time
Last updated April 24, 2024
Tags
CS
Language
URL

Intro::

디자인 패턴의 구조 패턴 중 하나인 프록시에 대해 알아봅시다.
 

프록시 패턴이란?

💡
프록시 패턴은 객체의 접근을 제어하기 위해 사용됩니다. 이 패턴은 실제 객체를 대신하여 그 객체의 기능을 대행하는 대리 객체(프록시)를 제공하여, 클라이언트와 실제 객체 사이의 상호작용을 관리합니다.
 

구성 요소

  1. Subject: 클라이언트가 사용하는 인터페이스로, RealSubject와 Proxy가 이 인터페이스를 구현합니다.
  1. RealSubject: 프록시가 대신하는 실제 객체입니다.
  1. Proxy: RealSubject의 기능을 대행하며, 추가적인 기능(예: 접근 제어, 지연 로딩 등)을 제공합니다.
 

프록시 패턴의 종류

  • Remote Proxy: 원격 객체에 대한 접근을 제어합니다.
  • Virtual Proxy: 생성 비용이 많이 드는 큰 객체의 생성을 지연시킵니다.
  • Protection Proxy: 객체에 대한 접근 권한을 제어합니다.
 

장점

  • 보안 향상: 클라이언트가 객체에 직접 접근하지 않도록 함으로써 보안을 강화할 수 있습니다.
  • 객체의 생명주기 관리: 프록시를 통해 객체의 생성과 소멸을 관리함으로써 효율적인 리소스 관리가 가능합니다.
  • 지연 초기화: 객체의 생성 비용이 높을 경우, 실제 필요한 시점까지 객체 생성을 지연시킬 수 있습니다.
 

단점

  • 응답 시간 지연: 프록시가 중간에서 처리 과정을 추가하기 때문에, 때로는 시스템의 응답 시간이 느려질 수 있습니다.
  • 복잡성 증가: 프록시 패턴을 도입하면 시스템의 구조가 복잡해질 수 있습니다.
 

코드 예시

// Subject 인터페이스 interface Image { void display(); } // RealSubject 클래스 class RealImage implements Image { private String fileName; public RealImage(String fileName) { this.fileName = fileName; loadFromDisk(fileName); } private void loadFromDisk(String fileName) { System.out.println("Loading " + fileName); } public void display() { System.out.println("Displaying " + fileName); } } // Proxy 클래스 class ProxyImage implements Image { private RealImage realImage; private String fileName; public ProxyImage(String fileName) { this.fileName = fileName; } public void display() { if (realImage == null) { realImage = new RealImage(fileName); } realImage.display(); } } // 클라이언트 코드 public class ProxyPatternDemo { public static void main(String[] args) { Image image1 = new ProxyImage("test_10mb.jpg"); // 이미지가 필요할 때만 실제 이미지 로딩 image1.display(); } }
 
 

References::

Loading Comments...