salsa source

[디자인패턴]클래스다이어그램(3) 구조패턴 - 데코레이터, 어댑터 본문

STUDY/디자인패턴

[디자인패턴]클래스다이어그램(3) 구조패턴 - 데코레이터, 어댑터

dayofday 2018. 4. 2. 16:18

구조패턴


더 큰 구조를 형성하기 위해 어떻게 객체를 합성하는지와 관련된 패턴


클래스구조패턴 > 상속을 통한 인터페이스나 구현을 복합하는 패턴 > Adapter

객체구조패턴 > 새로운 기능을 실현하기 위해 객체를 합성하는 법 제공 

>Bridge, Composite, Decorator,  Proxy, Flyweight






데코레이터패턴(Decorator Pattern)


- 서브클래스에 유연성을 제공하여 소스를 변경하지 않고서도 부가적인 기능이 확장되어 실행할 수 있도록 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴




장점

유연하게 기능 확장이 가능하다(상속보다는 더 융통성이 좋음)


단점

자잘한 클래스가 많이 생기기 때문에 각 데코레이터 클래스들의 역할을 알아야한다.


예시 : 자바 파일 I/O

InputStream은 추상구성요소, 모든 보조스트림의 조상인 FilterInputStream은 추상데코레이터

이를 상속받아 구현하는 BufferInputStream은 구상데코레이터

InputStream을 상속받는 FileInputStream 같은 기반 스트림은 구상 구성요소



관련 패턴

* 어댑터패턴 : 어댑터패턴은 다른 두 개의 인터페이스(API) 연결을 위함

 데코레이터패턴은 API 변경 없이 장식을 만듦

* 전략패턴 : 전략패턴은 알고리즘을 교체하여 기능을 변경 데코레이터패턴은 장식을 교체하거나 겹쳐서 기능 추가



참고 : http://unabated.tistory.com/entry/%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-%ED%8C%A8%ED%84%B4Decorator-Pattern

https://daddycat.blogspot.kr/2011/05/decorator-pattern.html






어댑터패턴(Adapter Pattern)


- 한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환. 인터페이스의 호환성 문제때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.

- 신식 클래스에 구식 클래스를 연동하여 사용 가능

- 기능이나 용도가 비슷하나 클래스의 메소드명, 인터페이스가 다른 경우 일치시키는 데 사용

- 기존 클래스 코드를 수정이 불가능한 경우, 새로 만든 클래스의 정보를 은닉하고자 하는 경우




관련 패턴

* 브릿지패턴 : 기능의 계층과 구현 계층을 연결 / 어댑터패턴은 인터페이스가 다른 클래스들을 연결

* 데코레이터패턴 : 인터페이스 변경 없이 기능 추가 / 어댑터패턴은 인터페이스가 다른 것을 메우기 위함


참고

https://daddycat.blogspot.kr/2011/05/adapter-pattern.html

Comments