JAVA

JAVA 디자인패턴 - 프록시(Proxy) 패턴

TECH 톡마스터 2023. 7. 14.

[ 목차 ]

    JAVA 디자인패턴 - 프록시(Proxy) 패턴
    JAVA 디자인패턴 - 프록시(Proxy) 패턴

    안녕하세요. 이번에 알아볼 JAVA 디자인패턴은 프록시(Proxy) 패턴입니다.

    1. 프록시(Proxy) 패턴 이란?

    프록시 패턴은 객체의 대리자 또는 객체에 대한 참조를 제공하여 실제 객체의 내부 로직을 감추는 구조적 디자인 패턴입니다. 프록시 객체는 클라이언트와 직접 상호작용하지만, 클라이언트가 실제 객체의 상태 변경이나 기능 호출을 할 때 실제 객체에 요청을 위임합니다.

    2. 프록시(Proxy) 패턴 구현 방법

    프록시 패턴은 다음 요소들을 통해 구현됩니다.

    1. Subject 인터페이스: 원래 객체와 프록시 객체에서 구현해야 하는 동일한 인터페이스입니다.
    2. RealSubject 클래스: Subject 인터페이스를 구현하는 실제 객체입니다.
    3. 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) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴

     

    디자인패턴 - 팩토리(Factory) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 싱글톤(Singleton) 패턴 [ 목차 ] 안녕하세요. 이번에는 팩토리(Factory) 패턴에 대해서 알아보도록 하겠습니다. 1. 팩토리(Factory) 패턴 이란? 팩토리 패턴은 객체 생성을

    tech.dj-tiger.com

    2023.07.12 - [JAVA] - 디자인패턴 - 어댑터(Adapter) 패턴

     

    디자인패턴 - 어댑터(Adapter) 패턴

    [ 목차 ] 안녕하세요. 오늘 알아볼 패턴은 어댑터(Adapter) 패턴입니다. 1. 어댑터(Adapter) 패턴 이란? 어댑터 패턴은 디자인 패턴 중 하나로, 서로 다른 인터페이스를 가진 클래스 또는 객체를 협력할

    tech.dj-tiger.com

     

    2023.07.12 - [JAVA] - JAVA 디자인패턴 - 싱글톤(Singleton) 패턴

     

    디자인패턴 - 싱글톤(Singleton) 패턴

    2023.07.12 - [JAVA] - 디자인패턴 - 팩토리(Factory) 패턴 [ 목차 ] 안녕하세요. 자바에는 다양한 디자인 패턴이 존재하고, 각 패턴은 특정한 문제를 해결하기 위해 설계되었습니다. 적절한 디자인 패턴

    tech.dj-tiger.com

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 옵저버(Observer) 패턴

     

    JAVA 디자인패턴 - 옵저버(Observer) 패턴

    [ 목차 ] 안녕하세요. 이번에는 Java 디자인패턴 중 옵저버(Observer) 패턴에 대해서 알아보겠습니다. 1. 옵저버(Observer) 패턴이란? 옵저버 패턴은 디자인 패턴 중 하나로, 한 객체의 상태가 변화하면

    tech.dj-tiger.com

     

    2023.07.13 - [JAVA] - JAVA 디자인패턴 - 데코레이터(Decorator) 패턴

     

    댓글

    💲 추천 글