티스토리 뷰
1. LiveData, ViewModel은 Google에서 제공하는 라이브러리이자, MVVM 아키텍처(디자인패턴)을 구현하기 위한 컴포넌트입니다.
2. MVVM는 UI와 UI에 표시되는 데이터를 묶어서 관리하자는 개념의 디자인 패턴입니다. Model(데이터), View(실제 뷰), ViewModel(뷰의 상태)가 있고, ViewModel의 상태가 업데이트 되면 자동으로 View가 업데이트 됩니다.
2-1. 즉 원래같으면 Activity-UI가 직접연결되어있지만, 이 사이에 ViewModel 이라는 완충재가 들어간 느낌입니다.
3. MVVM은 동적인 코드 부분 / UI부분을 확실하게 분리하기 위해서 주로 사용하는데, 이는 안드로이드에 GOD ACTIVITY 문제를 해결하는데 도움을 줍니다 (한 액티비티에 너무 많은 코드(역할)이 주어지는 것을 방지)
4. LiveData는 observe가능한 변수인데, observe하게되면 값이 변화할때마다 지정된 코드를 실행할 수 있습니다.
4-1. LiveData는 일반적인 이벤트-리스너 패턴에 안드로이드 생명주기 인식 기능이 추가되어, 액티비티나 프래그먼트가 활성 상태일 때만 업데이트를 받고 메모리 누수를 방지합니다.
5. ViewModel의 경우 Activity보다 LifeCycle이 길어 화면 방향 전환 등 Activity가 destroy되고 재생성되는 케이스에서 데이터 유지시 사용 가능! (같은 케이스에 대한 해결책으로 onSaveInstanceState/onRestoreInstanceState 메서드를 통한 번들(Bundle) 저장 방식도 있음)
class MainViewModel : ViewModel() {
// LiveData 정의 - 불변 타입을 외부에 노출
private val _userName = MutableLiveData<String>("")
val userName: LiveData<String> = _userName
// LiveData 값 업데이트 메소드
fun updateUserName(name: String) {
_userName.value = name // _userName.setValue(name)과 같음=>mainThread에서만 사용가능
_userName.postVale(name) // handler를 사용해 update
}
// ViewModel이 파괴될 때 호출됨
override fun onCleared() {
super.onCleared()
// 리소스 정리 작업 수행
}
}
// MainActivity.kt
// LiveData 관찰 설정
viewModel.userName.observe(this) { newName ->
// 값이 변경될 때마다 호출됨
nameTextView.text = newName
}
// 버튼 클릭 이벤트에서 ViewModel 데이터 업데이트
updateButton.setOnClickListener {
val name = nameEditText.text.toString()
viewModel.updateUserName(name)
}
기본적인 사용법은 위와 같고,
활용은
1. 싱글톤으로 생성해 액티비티/서비스/프레그먼트간 데이터 전송 용도로 사용
2. 다른 액티비티에서 여러번 사용되는 비슷한 동작을 수행하는 UI에 적용해 코드 재사용
마지막으로
DataBinding, Flow등을 얹어서 사용하기도 한다!
'배운 것 > 안드로이드' 카테고리의 다른 글
[Kotlin] Array / List / MutableList /ArrayList 간단 정리 비교 (0) | 2023.02.05 |
---|---|
[안드로이드] 구글맵 원형 범위 안에서 랜덤한 좌표 뽑아내기 (특정 위치로부터 원형 범위 안에 무작위 좌표 가져오기) (0) | 2021.10.14 |
[안드로이드] 구글맵에서 구멍 뚫린 도넛형 범위 표시하기 (0) | 2021.10.09 |
[안드로이드 라이브러리] shool-api 3.0.3 라이브러리 수정 (0) | 2018.03.07 |
[안드로이드] 날짜를 가져오고 원하는 형식으로 가공시키는 예제 (0) | 2017.08.15 |