본문 바로가기
백엔드/Java

[Java] 프록시 패턴, 데코레이터 패턴

by 작은소행성 2024. 4. 24.

프록시란 

프록시의 뜻은 대리자, 대변인으로 누군가 일일 대신 시키는 것을 의미하는데 

프로그램에서 사용 되는 뜻도 클라이언트가 객체를 직접 사용하는 것이 아니라 중간에 프록시를 거쳐 사용하는 것이다. 

 

프록시 패턴이란 

객체를 대리자가 대신 처리함으로 로직의 흐름을 제어하는 패턴이다. 

어떤 객체를 사용하고자 할때, 객체를 직접적으로 참조하는 것이 아닌 해당 객체를 대항하는 객체를 통해 대상 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 있고, 실제 객체의 기능이 필요한 시점까지 객체의 생성을 미룰 있다.

서버와 프록시의 같은 인터페이스 사용

클라이언트는 서버 인터페이스에만 의존한다.

서버와 프록시가 같은 인터페이스를 사용해서 DI를 사용해서 대체 가능하다. 

 

 

DI란

의존성 주입(Dependency Injection)으로 외부에서 객체 간의 관계(의존성)을 결정해주는데, 객체를 직접 생성하는 것이 아니라 외부에서 생성 후 주입시켜 주는 방식이다. 

DI를 통해 객체 간의 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있다. 

 

프록시의 주요 기능

  • 접근제어
  • 부가 기능 추가 

 

프록시 패턴과 데코레이터 패턴의 구분 

둘다 프록시를 사용하능 방법이지만 GOF 디자인 패턴에서는 의도(intent)에 따라서 구분한다. 

둘다 프록시를 사용하고 코드가 똑같이 생겨서 구분이 다르지만 사용 의도가 다르다. 

용어에 프록시가 포함된다고 해서 프록시 패턴만 프록시를 사용하는 것은 아니다. 

  • 프록시 패턴 : 접근 제어가 목적 
  • 데코레이터 패턴 : 새로운 기능 추가가 목적, 기능 확장을 위한 유연한 대안 제공 

 

 

 

데코레이터 패턴

데코레이터 패턴은 원래 서버가 제공하는 기능에 더해서 부가 기능을 수행한다. 

해당 그림에서는 Decorator 기능에 일부 중복이 있다. 

꾸며주는 역할인 Decorator들은 스스로 존재할 수 없고

호출 대상인 component 를 가지고 있어야 하며 component를 항상 호출해야 한다. 

이러한 중복을 없애기 위해 component 속성을 가진 Decorator라는 추상 클래스를 만드는 방법도 고민할 수 있다.

 

 

데코레이터 패턴의 장단점 

  • 장점 
    • 동적으로 기능 추가로 인한 유연한 확장 가능 
    • 기존 코드 수정 없이 새로운 기능을 추가할 수 있기에 코드 재사용성에 유리 
    • SRP(단일 책임 원칙) 을 준수하며 Decorator는 특정 기능의 추가, 수정에만 집중함
    • OCP(개방 폐쇄 원칙) 을 준수하며 기존 코드를 변경하지 않고 새로운 Decorator 추가함으로 쉽게 기능 확장 가능 
    • DIP(의존성 역전 원칙) 을 준수하며 Decorator가  component 에 의존하지 않음
  • 단점
    • 객체를 여러층으로 감싸서 많은 클래스의 생성과 복잡성 증가할 수 있음
    • Decorator 적용 순서에 따라 객체의 동작이나 상태가 변경될 수 있음
    • 여러 레벨의 Decorator를 사용할 경우 불필요한 객체 복사가 발생할 수 있음 

 

 

 

반응형