
sealed class는 부모 클래스를 상속하는 자식 클래스의 종류를 제한하는 특성을 갖는 클래스.
Enum Class : 타입 안정성을 갖는 상수의 집합을 표현합니다. Enum 클래스를 사용하여 열거형 타입을 정의할 수 있습니다.
프로젝트에서 엑티비티에 진입하자고 바로 api 요청 받는 화면에서 api 통신의 결과에 따른 상태관리가 필요했다
BrandDetailState.kt
sealed class BrandDetailState {
object Uninitialized : BrandDetailState()
object Failure: BrandDetailState()
object NotAuth: BrandDetailState()
data class Success(
val brand: BrandDetail
) : BrandDetailState()
}
BrandDetailActivity.kt
//..//
override fun observeData() {
viewModel.brandDetailStateLiveData.observe(this) {
when (it) {
is BrandDetailState.Uninitialized -> (
handleLoading() // 로딩 UI
}
is BrandDetailState.Success -> {
handleSuccess(it) //성공 했을 시 binding
}
is BrandDetailState.Failure -> {
handleFailure() // 실패 UI
}
is BrandDetailState.NotAuth -> {
handleNotAuth() // 로그인 화면으로 이동
}
}
}
//..//
전체적인 흐름은 viewModel에서 의존성 주입 받은 비즈니스 로직(api 통신)의 결과를 LiveData에 넣어 View에서 관찰하여 UI 상태를 번경 한다.