ViewModel을 사용하면 액티비티가 소멸되고 다시 생성될 때 폐기되지 않는 앱 관련 데이터를 저장한다. 즉, ViewModel 객체는 소멸되지 않는다.
앱은 자동으로 ViewModel 객체를 유지하므로 객체가 보유하고 있는 데이터를 재구성하여 즉시 사용할 수 있다
아키텍처 구성요소 라이브러리에서 가져온 ViewModel 클래스를 확장하고 이 클래스 내에 앱 데이터를 저장하여 ViewModel 을 구현한다!
1. 종속성 추가
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.1")
Compose 앱에 수명 주기 인식 ViewModel을 추가하는 데 사용된다.
2. 클래스 생성
ui 패키지에 ViewModel 클래스를 만든다.
import androidx.lifecycle.ViewModel
class MyPageViewModel : ViewModel() {
}
3. 상태 UI의 모델 클래스 추가
data class MyPageViewState(
val loadState: LoadState = LoadState.SUCCESS,
val nickname: String = "",
val phoneNumber: String = ""
)
4. StateFlow
StateFlow : 현재 상태와 새로운 상태 업데이트를 내보내는 관찰 가능한 데이터 홀더 흐름
즉, 현재 상태를 업데이트하고 흐름에 전송하여 값을 반영한다.
MyPageViewModel 클래스에서 _uiState 속성을 추가한다.
import kotlinx.coroutines.flow.MutableStateFlow
class MyPageViewModel: ViewModel() {
private val _uiState = MutableStateFlow(MyPageContract.MyPageViewState())
}
5. 자원 속성
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
class MyPageViewModel: ViewModel() {
private val _uiState = MutableStateFlow(MyPageContract.MyPageUiState())
val uiState: StateFlow<MyPageContract.MyPageUiState> = _uiState.asStateFlow()
}
_uiState는 ViewModel 내부에서만 접근/수정 가능,
uiState는 다른 클래스에서 접근 가능하지만 읽기 전용으로 get() 메서드로만 변경할 수 있다.
uiState를 _uiState.asStateFlow()로 설정한다 → 변경 가능 상태 흐름을 읽기 전용 상태 흐름으로 만든다.
'개발일지 > Android' 카테고리의 다른 글
[Android] 클린 아키텍처 VS 구글 권장 아키텍처, MVVM 패턴 (3) | 2024.04.19 |
---|---|
[Android] Compose - 이미지, 구분선, 텍스트, Preview, Button, 툴바 (0) | 2023.07.30 |
[Android] 클린 아키텍처 (Clean Architecture) (0) | 2023.07.18 |
[Android] Retrofit2 활용하여 API 연동 실전 예제 (0) | 2023.07.17 |
[Android] 4대 컴포넌트와 Intent (0) | 2023.03.26 |