KOTLIN · 객체지향
봉인 인터페이스 (Sealed Interface)
sealed interface는 구현 클래스를 같은 패키지 내로 제한합니다. sealed class보다 유연한 다중 상속이 가능합니다.
객체지향고급sealed-interfacewhenstate-managementexhaustive
핵심 설명
sealed interface는 구현 클래스를 같은 패키지 내로 제한합니다. sealed class보다 유연한 다중 상속이 가능합니다.
Kotlin code
sealed interface UiState {
data object Loading : UiState
data class Success<T>(val data: T) : UiState
data class Error(val message: String, val code: Int) : UiState
}
sealed interface Refreshable {
fun refresh()
}
// 여러 sealed interface 구현 가능
class UserListState(
val users: List<String>
) : UiState.Success<List<String>>(users), Refreshable {
override fun refresh() = println("새로고침!")
}
fun render(state: UiState) = when (state) {
is UiState.Loading -> println("로딩 중...")
is UiState.Success<*> -> println("데이터: ${state.data}")
is UiState.Error -> println("오류(${state.code}): ${state.message}")
}
fun main() {
render(UiState.Loading)
render(UiState.Success(listOf("김철수", "이영희")))
render(UiState.Error("서버 오류", 500))
}학습 팁
sealed interface는 when에서 모든 분기를 강제하므로 새 상태를 추가하면 컴파일러가 누락된 처리를 알려줍니다.
주의할 점
sealed class와 달리 sealed interface는 상태를 가질 수 없습니다. 공통 상태가 필요하면 sealed class를 사용하세요.
자주 묻는 질문
봉인 인터페이스 (Sealed Interface)란 무엇인가요?
sealed interface 는 구현 클래스를 같은 패키지 내로 제한합니다. sealed class보다 유연한 다중 상속이 가능합니다.
봉인 인터페이스 (Sealed Interface) 학습 시 주의할 점은 무엇인가요?
sealed class와 달리 sealed interface는 상태를 가질 수 없습니다. 공통 상태가 필요하면 sealed class를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.