본문 바로가기
프로그래밍/Kotlin

[Kotlin] Sealed Class

by Youngs_ 2024. 8. 20.

상황: 쇼핑몰 앱에서 상품의 배송 상태를 나타내는 기능을 구현한다고 가정해 보겠습니다.

sealed class 정의

sealed class DeliveryStatus {
    object Preparing : DeliveryStatus()
    data class Shipped(val trackingNumber:String) : DeliveryStatus()
    object Delivered : DeliveryStatus()
    data class Failed(val reason: String) : DeliveryStatus()
}

 

DeliveryStatus sealed class는 상품의 배송 상태를 나타내는 네 가지 가능한 상태를 정의합니다.

  • Preparing: 배송 준비 중
  • Shipped: 배송 시작됨 (송장 번호 포함)
  • Delivered: 배송 완료
  • Failed: 배송 실패 (실패 사유 포함) sealed class 사용:
fun displayDeliveryStatus(status:DeliveryStatus) {
    when (status) {
        is DeliveryStatus.Preparing -> 
            println("상품 배송을 준비하고 있습니다.")
        is DeliveryStatus.Shipped -> 
            println("상품이 배송되었습니다. 송장 번호: ${status.trackingNumber}")
        is DeliveryStatus.Delivered -> 
            println("상품이 배송 완료되었습니다.")
        is DeliveryStatus.Failed -> 
            println("상품 배송에 실패했습니다. 사유: ${status.reason}")
    }
}

// 예시 사용
val currentStatus = DeliveryStatus.Shipped("1234567890")
displayDeliveryStatus(currentStatus) // 출력: 상품이 배송되었습니다. 송장 번호: 1234567890

 

displayDeliveryStatus 함수는 DeliveryStatus 객체를 입력으로 받아, 각 상태에 맞는 메시지를 출력합니다.

장점

  • 명확성: sealed class를 사용하여 배송 상태를 명확하게 정의하고 관리할 수 있습니다.
  • 안전성: when 문을 사용하여 모든 가능한 상태를 처리하므로, 예상치 못한 상태로 인한 오류를 방지할 수 있습니다.
  • 확장성: 새로운 배송 상태가 추가되면 sealed class에 하위 클래스를 추가하여 쉽게 처리할 수 있습니다.

댓글