-
[디자인패턴] 데코레이터 패턴(Decorator Pattern), 랩퍼 패턴(wrapper pattern)개발공부 2022. 11. 6. 09:00반응형
기본 기능에 추가할 수 있는 많은 종류의 부가 기능에서 파생되는 다양한 조합을 동적으로 구현 가능하다.
간단한 예제
간단하게 A를 반환하는 객체를 만들고, A반환 객체에 B를 추가로 반환하는 데코레이터를 만들어보자.
interface String { fun getString(): String } class StringA: String { override fun getString(): kotlin.String { return "A" } } class StringB(private val target: String): String { override fun getString(): kotlin.String { return "${print.getString()}B" } } fun main(args: Array<kotlin.String>) { val stringA: String = StringA() println(stringA.getString()) val decoratorB: String = StringB(stringA) println(decoratorB.getString()) } --- 출력 결과: A AB
데코레이터 패턴이 적용된 라이브러리: java.io
BufferedInputStream 클래스는 FilterInputStream을 상속 받고 있다.
생성자를 확인해보면 InputStream을 파라미터로 받고, 받은 in을 super로 FilterInputStream 생성자에 보내고 있다.
class BufferedInputStream extends FilterInputStream { public BufferedInputStream(InputStream in, int size) { super(in); ... } }
데코레이터가 적용된다는 것은 새로운 책임과 행동이 추가된다는 것이다.
데코레이터 패턴을 사용하면 자잘한 객체가 매우 많이 추가될 우려가 있다.
반응형'개발공부' 카테고리의 다른 글
[디자인패턴] 퍼사드 패턴(Facade Pattern)과 최소 지식 원칙(Principle of Least Knowledge) (0) 2022.11.08 [디자인패턴] 어댑터 패턴(Adapter Pattern) (0) 2022.11.06 [리펙토링 데이터베이스] 데이터베이스 냄새와 관리 (0) 2022.11.05 [git][오픈소스 기여하기] git 브랜치 히스토리 비교하기 (0) 2022.08.19 [오픈소스 기여하기] 쿠버네티스 공식문서 이슈 생성 (0) 2022.07.19