ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [GoF]데코레이터 패턴(Decorator Pattern)
    Gof Design Pattern 2021. 12. 16. 22:38

     

    데코레이터 패턴(Decorator Pattern)

     

     

      데코레이터 패턴이란?


    데코레이터 패턴은 장식과 실제 내용물을 동일시 하는 패턴으로 생성된 객체에 동적으로 행위를 추가하는 패턴입니다.

     

    ※자바의 I/O 스트림 클래스는 Decorator 패턴을 사용한 것입니다.

    Socket socket = new Socket();
    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

     

     

      데코레이터 패턴 왜 사용할까?


    기능을 확장할 때 IS-A 관계라면 상속을 사용하게 됩니다. 그러나 HAS-A 관계라면 상속을 사용하기 모호한 상황이게 됩니다. 무언가 기능을 유연하게 추가하고자 할때 데코레이터 패턴을 사용하여 기능을 확장할 수 있습니다. 즉, 전체 객체를 바꾸는 게 아니라 객체에 새로운 기능을 하나씩 추가할 수 있습니다.

     

    데코레이터 패턴을 사용하게 되면

    • 상속보다 설계의 유연성을 증가시킴
    • Decorator 조합을 통해 새로운 서비스를 지속적으로 추가 할 수 있음
    • 불필요한 경우 Decorator 삭제가 가능함
    • Decorator와 실제 컴포넌트는 동일한 것이 아님
    • 작은 규모의 객체들이 많이 생성될 수 있음

     

      클래스 다이어그램


     

      객체 협력


     

    • Component : 동적으로 추가할 서비스를 가질 수 있는 객체 정의
    • ConcreteComponent : 추가적인 서비스가 필요한 실제 객체
    • Decorator : Component의 참조자를 관리하면서 Component에 정의된 인터페이스를 만족하도록 정의
    • ConcreteDecorator : 새롭게 추가되는 서비스를 실제 구현한 클래스로 addBehavior()를 구현

     

     

     

      코드보기 Click!


    GIT COMMIT 링크 열기!

    댓글