본문 바로가기
카테고리 없음

코틀린 Sealed

by 김어찐 2022. 5. 25.
728x90

열거형은 특정 값을 의마하는 상수들을 모와 관리하는 개념

Sealed 객체를 모아 관리하는 개념

package sealed

fun main() {

    val v2 = Number2.SealedOne(1)
    val v3 = Number2.SealedTwo(2)

    checkNumber2(v2)
    checkNumber2(v3)
}

enum class Number(val num: Int) {
    ONE(1),TWO(2)
}

fun checkNumber(a1: sealed.Number) {
    when (a1) {
        Number.ONE -> println("1입니다")
        Number.TWO -> println("2입니다")
    }
}

sealed class Number2{
    class SealedOne(val a1:Int,val a2:Int):Number2()
    class SealedTwo(val a1:Int):Number2(){
        fun sealedFun2(){
            println("selaedTwo의 sealedFun2 입니다")
        }
    }
    class SealedThree(val a1:Int):Number2()
}

fun checkNumber2(obj: Number2) {
    when(obj){
        // 스마트 캐스팅 발생
        is Number2.SealedOne -> {
            println("One 입니다")
            println("obj.a1 = ${obj.a1}")
        }
        is Number2.SealedTwo ->{
            println("Two 입니다")
            println("obj.a1 = ${obj.a1}")
            obj.sealedFun2()
        }

        is Number2.SealedThree -> println("Three 입니다")

    }
}
728x90