PHpullh
학습 라이브러리/Kotlin/sealed class & sealed interface

KOTLIN · 객체지향

sealed class & sealed interface

제한된 클래스 계층. when과 함께 써서 컴파일러가 모든 케이스를 확인합니다.

객체지향중급sealedwhen상태머신ADTNetworkResult

핵심 설명

제한된 클래스 계층. when과 함께 써서 컴파일러가 모든 케이스를 확인합니다.

Kotlin code

// 네트워크 응답 모델링
sealed class NetworkResult<out T> {
    data class Success<T>(val data: T) : NetworkResult<T>()
    data class Error(
        val code: Int,
        val message: String
    ) : NetworkResult<Nothing>()
    object Loading : NetworkResult<Nothing>()
}

// UI 상태 모델링 (Android/Compose 패턴)
sealed interface UiState<out T> {
    object Idle : UiState<Nothing>
    object Loading : UiState<Nothing>
    data class Content<T>(val data: T) : UiState<T>
    data class Error(val throwable: Throwable) : UiState<Nothing>
}

fun <T> handleResult(result: NetworkResult<T>) {
    when (result) {
        is NetworkResult.Success  -> println("✅ ${result.data}")
        is NetworkResult.Error    -> println("❌ ${result.code}: ${result.message}")
        NetworkResult.Loading     -> println("⏳ 로딩 중...")
        // else 불필요 — 컴파일러가 완전성 검사
    }
}

fun main() {
    handleResult(NetworkResult.Success("Hello Kotlin"))
    handleResult(NetworkResult.Error(404, "Not Found"))
    handleResult(NetworkResult.Loading)
}

학습 팁

Kotlin 1.5+에서 sealed interface가 추가됐습니다. 하나의 클래스가 여러 sealed interface를 구현할 수 있어 더 유연합니다.

주의할 점

sealed class의 하위 클래스는 같은 파일에 있어야 합니다(Kotlin 1.5 이전). 1.5+에서는 같은 패키지 내 어디든 가능합니다.

자주 묻는 질문

sealed class & sealed interface란 무엇인가요?

제한된 클래스 계층. when 과 함께 써서 컴파일러가 모든 케이스를 확인합니다.

sealed class & sealed interface 학습 시 주의할 점은 무엇인가요?

sealed class 의 하위 클래스는 같은 파일 에 있어야 합니다(Kotlin 1.5 이전). 1.5+에서는 같은 패키지 내 어디든 가능합니다.