KOTLIN · 객체지향
데코레이터 패턴 (Decorator Pattern)
기존 객체에 동적으로 기능을 추가하는 패턴입니다. Kotlin의 by 위임과 결합하면 보일러플레이트를 크게 줄입니다.
객체지향고급decoratorby-delegationwrappercomposition
핵심 설명
기존 객체에 동적으로 기능을 추가하는 패턴입니다. Kotlin의 by 위임과 결합하면 보일러플레이트를 크게 줄입니다.
Kotlin code
interface TextProcessor {
fun process(text: String): String
}
class PlainProcessor : TextProcessor {
override fun process(text: String) = text
}
class UpperCaseDecorator(
private val inner: TextProcessor
) : TextProcessor by inner {
override fun process(text: String) =
inner.process(text).uppercase()
}
class TrimDecorator(
private val inner: TextProcessor
) : TextProcessor by inner {
override fun process(text: String) =
inner.process(text).trim()
}
class PrefixDecorator(
private val inner: TextProcessor,
private val prefix: String
) : TextProcessor by inner {
override fun process(text: String) =
"$prefix${inner.process(text)}"
}
fun main() {
val processor = PrefixDecorator(
UpperCaseDecorator(TrimDecorator(PlainProcessor())),
"[결과] "
)
println(processor.process(" hello kotlin "))
// [결과] HELLO KOTLIN
}학습 팁
데코레이터를 함수형으로 구현할 수도 있습니다: val process = ::trim andThen ::uppercase 형태의 함수 합성이 더 간결할 수 있습니다.
주의할 점
데코레이터 순서가 결과에 영향을 미칩니다. TrimDecorator를 UpperCaseDecorator 뒤에 적용하면 의도와 다른 결과가 나올 수 있습니다.
자주 묻는 질문
데코레이터 패턴 (Decorator Pattern)란 무엇인가요?
기존 객체에 동적으로 기능을 추가하는 패턴입니다. Kotlin의 by 위임과 결합하면 보일러플레이트를 크게 줄입니다.
데코레이터 패턴 (Decorator Pattern) 학습 시 주의할 점은 무엇인가요?
데코레이터 순서가 결과에 영향을 미칩니다. TrimDecorator를 UpperCaseDecorator 뒤에 적용하면 의도와 다른 결과가 나올 수 있습니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.