Proxy Pattern

P.W.J·2023년 4월 20일
1

DesignPattern

목록 보기
1/2
post-thumbnail

프록시 패턴(Proxy Pattern)

  • Proxy는 우리말로 대리자, 대변인이라는 뜻입니다. 대리자, 대변인은 다른 누군가를 대신해서 그 역할을 수행하는 존재입니다. 프로그램에서 프록시에게 어떤 일을 대신 시키는 것입니다.
  • 프록시 패턴(Proxy Pattern)은 대상 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 행동 패턴이다.
  • 그냥 객체를 이용하면 되지, 이렇게 번거롭게 중계 대리자를 통해 이용하는 방식을 취하는 이유는, 대상 클래스가 민감한 정보를 가지고 있거나 인스턴스화 하기에 무겁거나 추가 기능을 가미하고 싶은데, 원본 객체를 수정할수 없는 상황일 때를 극복하기 위해서이다.

프록시 패턴 특징

  • 패턴 사용 시기

    • 접근을 제어하거가 기능을 추가하고 싶은데, 기존의 특정 객체를 수정할 수 없는 상황일때 사용한다.
    • 초기화 지연, 접근 제어, 로깅, 캐싱 등, 기존 객체 동작에 수정 없이 하고 싶을 떄 사용한다.
  • 패턴 장점
    - 개방 폐쇄 원칙(OCP) 준수
    - 기존 대상 객체의 코드를 변경하지 않고 새로운 기능을 추가할 수 있다.
    - 단일 책임 원칙(SRP) 준수
    - 대상 객체는 자신의 기능에만 집중 하고, 그 이외 부가 기능을 제공하는 역할을 프록시 객체에 위임하여 다중 책임을 회피 할 수 있다.
    - 원래 하려던 기능을 수행하며 그외의 부가적인 작업(로깅, 인증, 네트워크 통신 등)을 수행하는데 유용하다
    - 클라이언트는 객체를 신경쓰지 않고, 서비스 객체를 제어하거나 생명 주기를 관리할 수 있다.
    - 사용자 입장에서는 프록시 객체나 실제 객체나 사용법은 유사하므로 사용성에 문제 되지 않는다.

  • 패턴 단점

    • 많은 프록시 클래스를 도입해야 하므로 코드의 복잡도가 증가한다.
    • 예를들어 여러 클래스에 로깅 기능을 가미 시키고 싶다면, 동일한 코드를 적용함에도 각각의 클래스에 해당되는 프록시 클래스를 만들어서 적용해야 되기 때문에 코드량이 많아지고 중복이 발생 된다.
    • 프록시 클래스 자체에 들어가는 자원이 많다면 서비스로부터의 응답이 늦어질 수 있다.
  • 다른 디자인 패턴과의 차이점

    1. 프록시 패턴 vs 데코레이터 패턴
    • 프록시 패턴(Proxy Pattern) : 어떠한 클래스에 대한 접근을 제어 혹은 접근에 초점에 맞춘 용도로 쓰입니다.
    • 데코레이터 패턴(Decorator Pattern) : 클래스에 새로운 행동 or 기능을 추가하기 위한 용도로 쓰입니다.
    1. 프록시 패턴 vs 어댑터 패턴
    • 프록시 패턴과 어댑터 패턴 모두 클라이언트와 객체 사이에 위치하여 클라이언트의 요청을 받아서 다른 객체에게 전달해주는 역할을 합니다.
    • 하지만, 어댑터 패턴은 다른 객체의 인터페이스를 바꿔주지만, 프록시 패턴에서는 똑같은 인터페이스를 사용합니다.

프록시 패턴 종류

  • 가상 프록시(Virtual Proxy)
    - 생성하기 힘든, 비용이 많이 드는 객체를 대신하는 역할을 맡습니다.
    - 실제 객체의 사용 시점을 제어할 수 있습니다. 클라이언트가 처음 요청 및 접근할 때만 실제 객체가 생성되며 이후는 프록시를 참조하여 실제 객체를 대신할 수 있습니다.
  • 원격 프록시(Remote Proxy)
    - 원격 프록시는 다른 JVM에 위치한 객체와 정보를 주고 받습니다.
    - 원격 프록시의 메소드를 호출하게 되면 네트워크를 통해 전달되어 원격 객체의 메소드가 호출되며 이러한 결과는 다시 클라이언트에게 전달됩니다.

  • 보호 프록시(Protection Proxy)
    • 객체에 대해 액세스(접근) 할 수 있는 권한을 부여하는 것입니다.
    • 민감한 객체에 대해 접근을 제어할 수 있습니다.
  • 프록시 패턴은 단순하면서도 자주 쓰이는 패턴이며, 그 활용 방식도 다양하다. → 기본형 프록스 패턴을 어떤 방식으로 변형하느냐에 따라 다양한 프록시 패턴의 종류가 나뉘어지게 된다.
profile
Backend

0개의 댓글