Kotlin 상태 관리 | Sealed Class vs Enum Class 차이점

2025. 2. 6. 17:39프로그래밍 언어/Kotlin 기초

728x90
반응형

개발을 하나보면 상태 관리가 중요하다.

그럴 때 자주 등장하는 Sealed ClassEnum Class.

이 두개의 차이점에 대해 확인해보자.

 

1. Sealed Class vs Enum Class 차이점!

✅ 언제 사용하면 좋을까?

sealed class → 상태 관리, API 응답 처리, 다양한 타입을 표현할 때

// Sealed Class 사용 예시
sealed class NetworkResult {
    data class Success(val data: String) : NetworkResult()
    data class Error(val message: String) : NetworkResult()
    object Loading : NetworkResult()
}

 

enum class → 변하지 않는 값 목록(예: 색상, 방향, 타입)

// Enum Class 사용 예시
enum class NetworkState {
    SUCCESS, ERROR, LOADING
}

 

✅ Sealed Class 사용 예제

fun fetchData(): NetworkResult {
    return try {
        // 네트워크 요청 성공했다고 가정
        NetworkResult.Success("데이터 로드 성공!")
    } catch (e: Exception) {
        NetworkResult.Error("네트워크 오류 발생!")
    }
}

fun handleNetworkResult(result: NetworkResult) {
    when (result) {
        is NetworkResult.Success -> println("✅ 성공: ${result.data}")
        is NetworkResult.Error -> println("❌ 오류: ${result.message}")
        NetworkResult.Loading -> println("⏳ 로딩 중...")
    }
}

fun main() {
    val result = fetchData()
    handleNetworkResult(result)
}

NetWorkResult라는 SealedClass 안에 Success를 전달함으로써, 그 안에 data값을 쓸 수 있다.

고로 Sealed Class를 사용하면 각 상태별로 데이터를 다르게 처리할 수 있다.

 

✅ Enum Class 사용 예제

fun fetchData(): NetworkState {
    return NetworkState.SUCCESS // 성공 상태 반환
}

fun handleNetworkState(state: NetworkState) {
    when (state) {
        NetworkState.SUCCESS -> println("✅ 네트워크 요청 성공!")
        NetworkState.ERROR -> println("❌ 네트워크 오류 발생!")
        NetworkState.LOADING -> println("⏳ 로딩 중...")
    }
}

fun main() {
    val state = fetchData()
    handleNetworkState(state)
}

Sealed Class처럼 값을 주고받지는 못한다.

하지만 고정된 상태값은 넘겨줄 수 있다.

단순하게 상태만 관리하는 경우 사용하기 편하다.

 

2. 차이점 정리

  sealed class (NetworkResult) enum class (NetworkState)
데이터 포함 여부 ✅ 각 상태마다 추가 데이터 가능 (Success(data), Error(message)) ❌ 단순한 상태만 가능 (SUCCESS, ERROR)
확장 가능 여부 ✅ 새로운 상태 추가 가능 ❌ 고정된 값만 가능
추천 사용 예시 네트워크 응답 데이터 처리, 상세한 상태 관리 단순한 상태 구분 (예: 로딩, 성공, 실패)

 

데이터를 포함해야 하면 sealed class

단순 상태 구분이면 enum class

728x90
반응형