Kotlin ‐ 제한된 계층구조를 표현하기 위해 sealed 클래스와 sealed 인터페이스를 사용하라[Effective Kotlin Item 39] - thought-corner/Backend-PlayGround GitHub Wiki
제한된 계층구조를 표현하기 위해 sealed 클래스와 sealed 인터페이스를 사용하라
sealed 클래스와 sealed 인터페이스는 제한된 게층구조를 나타낸다.
- 제한된 계층구조는 미리 정해진 일련의 구체적인 클래스로 구성된 계층구조를 의미한다.
sealed interface Payment {
data class Card(val number: String) : Payment
data class Cash(val amount: Int) : Payment
object Free : Payment
}
// 미래에 변경될 수 있지만, 현재에는 final로 간주되는 계층구조를 표현할 때 사용
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result()
}
- 즉,
sealed 한정자를 사용하면 서브클래스의 종류를 제한할 수 있다.
sealed 클래스가 라이브러리나 모듈 안에 정의되어 있다면 그 라이브러리나 모듈을 사용하는 클라이언트는 sealed 클래스의 서브 클래스를 추가할 수 없다.
- 어느 누구도 로컬 클래스 또는 객체 표현식으로
sealed 클래스를 상속할 수 없다. 서브 클래스가 제한된 계층구조를 가지게 되는 것이다.
sealed 클래스와 when 표현식