Sealed Class

💀LeeSY·2022년 7월 28일
0
post-thumbnail

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
}

//모든 클래스 타입에 대한 분기문을 제공했으므로 else 분기문은 불필요
profile
A little strange but passionate, sincere hard worker.

0개의 댓글

관련 채용 정보