Skip to main content Link Menu Expand (external link) Document Search Copy Copied

created at 2024-09-06

Table of contents

  1. Kotlin Sealed class

Kotlin Sealed class

  • reference : https://kotlinlang.org/docs/sealed-classes.html
  • enum 이랑 거의 똑같은데 좀 더 유연합니다.
    • ENUM 은 constant 이지만, Sealed class 는 아래처럼 외부에서 원하는 값을 파라미터로 넣어서 반환시켜줄 수 있어요.
    • 즉, ENUM 은 상수만 쓸 수 있고, SEALED 는 상수 + 변수 둘 다 쓸 수 있음!
sealed class VerificationResult {
  data class Success(val message: String? = "") : VerificationResult()
  data class Error(val message: String? = "") : VerificationResult()
  data class SuccessFindMe(val userDto: UserDto) : VerificationResult()
}

//result = VerificationResult.Success("Success message 1")
//result = VerificationResult.Success("Success message 2")
//result = VerificationResult.Success("Success message 3")
//result = VerificationResult.Error("Error message 1")
//result = VerificationResult.Error("Error message 2")
//result = VerificationResult.SuccessFindMe(UserDto("name", "email"))

when(result){
    is VerificationResult.Error -> {
        println(message) // Error message 1,2 다 가능
    }
    is VerificationResult.Success -> {
        println(message) // Success message 1,2,3 다 가능
    }
    is VerificationResult.SuccessFindMe -> {
        println(userDto) // dto 객체도 가능
    }
}

항상 enum 상수만 반환받아서 쓰다가 특정 상황에서는 변수도 받아서 쓰고 싶어서 sealed class 를 사용했습니다. 해당 특정상황은 어쩔수없이 한 곳에서 여러 유형의 데이터를 받아서 처리해야하는 경우였습니다. 콜백통해서 한쪽으로만 여러 유형의 데이터가 들어오고 그걸 처리할 때, 해당 콜백 함수에서 sealed class 를 사용하면 when 으로 깔끔하게 정리가능했습니다 :)