반응형
이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서
Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다.
#
class 가 어떻게 동작해야 하는지를 명시하는 "mode" 라는 constant 를 가진 class 들이 있다.
이 클래스들을 tagged class 라고 부른다.
tagged class 의 가장 큰 문제는 다른 mode 에 대해서 코드가 공존하면서 충돌을 일으킨다는 점이다.
#
tagged class 의 문제들은 다음과 같다.
- 복수개의 mode 를 다루므로 boilerplate 가 발생한다.
- property 사용에 대한 일관성이 떨어진다. mode 에 따라 미사용하는 property 들이 발생한다.
- state 의 일관성과 올바름을 보호하기가 어렵다. (값 변화 trigger point 가 다양하므로)
- object 가 올바르게 생성되었는지 보장을 얻기 위해 factory method 를 요구한다.
#
tagged class 대신 Kotlin 에서는 sealed class 를 사용할 수 있다.
sealed class ValueMatcher<T> {
abstract fun match(value: T): Boolean
class Equal<T>(val value: T): ValueMatcher<T>() {
override fun match(value: T): Boolean = (value == this.value)
}
class NotEqual<T>(val value:T): ValueMatcher<T>(){
override fun match(value: T): Boolean = (value != this.value)
}
...
}
Sealed modifier
#
sealed 대신 abstract 를 쓸 수도 있다.
sealed 의 장점은 file 바깥에서 subclass 가 생성되는 것을 방지한다.
그래서 when 문을 사용할 때 else branch 를 사용하지 않아도 된다. (abstract 는 else 필요)
Tagged classes are not the same as state pattern
#
state pattern 은 내부 상태에 따라 동작이 달라지는 design pattern 을 말한다.
Summary
끝
반응형
댓글