디자인패턴: proxy 패턴, facade 패턴

yshjft·2022년 2월 14일
0

Java, OOP

목록 보기
13/27

✔︎ proxy 패턴

인터페이스를 사용하고 실행시킬 클래스에 대한 객체가 들어갈 자리에 대리자(proxy) 객체를 대신 투입하는 패턴이다. 단 proxy 객체는 결과값을 조작하거나 변경시켜선 안된다.

  • 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. (인터페이스를 사용)
  • 대리자는 실제 서비스에 대한 참조 변수를 가진다.
  • 대리자는 실제 서비스와 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다.
  • 대리자는 실제 서비스의 메서드 호출 전후에도 별도의 로직을 수행할 수도 있다.

프록시 패턴은 RealSubject의 접근에 대한 제어를 목적으로 한다.(제어의 흐름을 조정)

proxy 패턴 종류

  • 가상 프록시
    • 꼭 필요로 하는 시점까지 객체의 생성을 연기하고, 해당 객체가 생성된 것처럼 동작하도록 만들고 싶을때 사용하는 패턴이다.
    • 프록시 클래스에서 자잘한 작업들을 처리하고 리소스가 많이 요구되는 작업들이 필요할 때에만 주체 클래스를 사용하도록 구현한다.
  • 보호 프록시
    • 주체 클래스에 대한 접근을 제어하기 위한 경우에 객체에 대한 접근 권한을 제어하거나 객체마다 접근 권한을 달리하고 싶을때 사용하는 패턴으로 프록시 클래스에서 클라이언트가 주체 클래스에 대한 접근을 허용할지 말지 결정한다.
  • 원격 프록시
    • 로컬 환경에 존재하며 원격 객체에 대한 대변자 역할을 한다.
    • 서로 다른 주소 공간에 있는 객체에 대해 같은 주소 공간에 있는 것처럼 동작하게 만든다.

proxy 패턴 단점

  • 객체를 생성할 때 한단계를 거치게 되므로, 빈번환 객체 생성이 필요한 경우 성능이 저하될 수 있다.
  • 프록시 내부에서 객체 생성을 위해 스레드가 생성, 동기화가 구현되어야 하는 경우 성능이 저하될 수 있다
  • 로직이 난해해져 가독성이 떨어질 수 있다.

예제 코드

proxy 패턴 예제 코드

solid 관점

SOLID 관점에서 본 프록시 패턴

참고

✔︎ facade 패턴

서브 시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공하며 이를 통해 서브 시스템을 더 쉽게 사용할 수 있도록 한다. (여러 서브 시스템 클래스를 하나의 클래스로 묶는다.)

예제 코드

facade 패턴 예제 코드

참고

profile
꾸준히 나아가자 🐢

0개의 댓글