한줄코딩 디자인패턴 스터디 발표 210925

bluesky·2021년 9월 20일
0

[1] 개념 및 사용하는 경우.

{1} 개념

  • 객체에 동적으로 새로운 책임을 추가할 수 있게 하는 패턴.
  • 데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다.이를 이용하여 OCP를 충족하는 유연한 구조를 만들수 있다.

{2} 사용하는 경우.

  • 객체의 타입과 호출 가능한 메소드를 그대로 유지하면서 객체에 새로운 책임을 추가할 때 사용한다.
  • 탈부착 가능한 책임을 정의할 때 사용한다.
  • 상속을 통해 서브클래스를 계속 만드는 방법이 비효율적일 때 사용한다.
    • 특히 조합되는 경우의 수가 많으면 서브클래스 수가 폭발적으로 늘어날 수 있다.

[2] 본론.

{1} 이론.

Component

  • 기본 기능을 뜻하는 ConcreteComponent와 추가 기능을 뜻하는 Decorator의 공통 기능을 정의즉, 클라이언트는 Component를 통해 실제 객체를 사용함

ConcreteComponent

  • 기본 기능을 구현하는 클래스

Decorator

  • 많은 수가 존재하는 구체적인 Decorator의 공통 기능을 제공

ConcreteDecoratorA, ConcreteDecoratorB

  • Decorator의 하위 클래스로 기본 기능에 추가되는 개별적인 기능을 뜻함

{2} 예시.

코드 예시 2개.

(1) 커피 주문.

(2) 자바 I/O

  1. InputStream : 추상 구성요소
  2. FileInuptStream : 구상 구성요소
  3. FilterInputStream : 추상 데코레이터
  4. PushbackInputStream, Buffered InputStream : 구상 데코레이터 역할

[3] 주의사항

  • 특정 형식에 의존하는 코드에 사용하기 어려움ex) 특정 구상 구성요소인지 확인한 다음 어떤 작업을 처리하는 경우.
  • 자잘한 클래스가 너무 많이 추가될 수 있음.(ex) 자바 I/O)
  • 데코레이터를 도입하면 구성요소를 초기화하는데 필요한 코드가 복잡해질수 있는 단점이 있음.이때 빌더 패턴(Builder Pattern), factory-pattern을 같이 사용하기도 함.

[4] 실습

  • 햄버거 가게.

[5] 참고자료

HeadFirst Design Pattern 3 데코레이터 패턴

https://johngrib.github.io/wiki/decorator-pattern/

[Design Pattern] 데코레이터 패턴이란 - Heee's Development Blog

[디자인패턴] 데코레이터 패턴 (Decorator Pattern)

profile
SMART https://github.com/dongseoki?tab=repositories

0개의 댓글