개발공부
[디자인패턴] 데코레이터 패턴(Decorator Pattern), 랩퍼 패턴(wrapper pattern)
원석💎-dev
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);
...
}
}
데코레이터가 적용된다는 것은 새로운 책임과 행동이 추가된다는 것이다.
데코레이터 패턴을 사용하면 자잘한 객체가 매우 많이 추가될 우려가 있다.
반응형