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+에서는 같은 패키지 내 어디든 가능합니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.