반응형
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")
- Sealed Class는 추상 클래스와 동일하게 객체 생성이 불가능하다.
- Sealed Class는 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
}
//모든 클래스 타입에 대한 분기문을 제공했으므로 else 분기문은 불필요
반응형