Kotlin 상태 관리 | Sealed Class vs Enum Class 차이점
2025. 2. 6. 17:39ㆍ프로그래밍 언어/Kotlin 기초
728x90
반응형
개발을 하나보면 상태 관리가 중요하다.
그럴 때 자주 등장하는 Sealed Class와 Enum 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
반응형
'프로그래밍 언어 > Kotlin 기초' 카테고리의 다른 글
Kotlin 코딩테스트의 Kick! 우선순위큐 (Priority Queue) (0) | 2025.02.15 |
---|---|
Kotlin inline 함수, 진짜 성능 최적화에 도움이 될까? (0) | 2025.02.07 |
Kotlin에서 launch와 async는 무엇이 다를까? (0) | 2025.02.03 |
[프로그래머스/Kotlin]Level3 - 양과 늑대 (0) | 2023.06.25 |
[Kotlin]Typealias VS Inline Class (0) | 2023.02.24 |