Sealed Class란?
- 봉인 클래스는 추상 클래스와 비슷하게 상속 과정을 통해 완성 가능한 클래스를 정의함과 동시에 해당 클래스를 상속받는 클래스의 개수를 제한하고 싶을 때 사용한다.
- 미리 만들어 놓은 자료형들을 묶어서 제공하는 방식
Sealed Class 정의
- sealed 키워드를 사용해 봉인 클래스를 정의
sealed class Parent {
abstract fun abstractMethod()
}
sealed class Result {
open class Success(val message: String): Result()
class Error(val code: Int, val message: String): Result()
}
- Parent 클래스를 상속받는 클래스를 정의. 단, sealed class는 같은 파일안에서만 상속을 허용한다.
sealed class Parent {
abstract fun abstractMethod()
}
class Child : Parent() {
override fun abstractMethod() = println("from child")
}
class Inside: Result.Success("Status")
- 실드 클래스는 추상 클래스와 동일하게 객체 생성이 불가능하다.
- 실드 클래스는 private이 아닌 생성자는 허용하지 않는다.
When - Case
- When - Case 표현식을 통해 자식 타입의 종류에 따라 분기처리가 가능하다.
val childType = when(parent) {
is ChildFirst -> 1
is ChildSecond -> 2
is ChildThird -> 3
}
fun eval(result: Result): String = when (result) {
is Status -> "in progress"
is Result.Success -> result.message
is Result.Error -> result.message
}