PHpullh
학습 라이브러리/Kotlin/봉인 인터페이스 (Sealed Interface)

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 interfacewhen에서 모든 분기를 강제하므로 새 상태를 추가하면 컴파일러가 누락된 처리를 알려줍니다.

주의할 점

sealed class와 달리 sealed interface는 상태를 가질 수 없습니다. 공통 상태가 필요하면 sealed class를 사용하세요.

자주 묻는 질문

봉인 인터페이스 (Sealed Interface)란 무엇인가요?

sealed interface 는 구현 클래스를 같은 패키지 내로 제한합니다. sealed class보다 유연한 다중 상속이 가능합니다.

봉인 인터페이스 (Sealed Interface) 학습 시 주의할 점은 무엇인가요?

sealed class와 달리 sealed interface는 상태를 가질 수 없습니다. 공통 상태가 필요하면 sealed class를 사용하세요.