전 글에서 MutableLiveData를 사용해서 간단한 실습을 해보았다.
사용해봤던 MutableLiveData와 LiveData의 차이는 무엇일까?
결론부터 말하자면 LiveData는 변경될 수 없고, MutableLiveData는 변경될 수 있다.
바로 실습을 통해서 이에 대해서 구체적으로 알아보자!
그 전의 게시물에 사용했던 코드의 액티비티 클래스에서 직접 다음과 같이 MutableLiveData의 값을 변경해보자.
viewModel.testMutableLiveData.value = 10
MutableLiveData는 이런식으로 ViewModel클래스 이외에 Activity클래스에서도 변경이 가능하다.
하지만!!
이럼 우리가 ViewModel클래스를 만들어준 의미가 없어지고,
뷰모델에서만 변경하려고 하는 목적에서 ViewModel을 만들어주었는데 이렇게 액티비티에서 변경할 수 있게 해준다면
문제가 발생할 수 있다!!
액티비티에서 값을 변경하는 것을 원치 않을 때 다음과 같이 LiveData를 사용할 수 있다.
class MainViewModel : ViewModel() {
private var _testMutableLiveData = MutableLiveData(0)
val testLiveData : LiveData<Int>
get() = _testMutableLiveData
fun plusLiveDataValue(){
_testMutableLiveData.value = _testMutableLiveData.value!!.plus(1)
}
이렇게 했을 때 MutableLiveData는 변경이 가능하지만 다음과 같이 LiveData는 변경이 불가능하다.
viewModel.testLiveData.value = 10 -> 이는 불가능함. 뷰모델에서만 변경하고 싶은 데이터
lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
findViewById<Button>(R.id.btnArea).setOnClickListener {
viewModel.plusLiveDataValue()
}
viewModel.testLiveData.observe(this, Observer {
findViewById<TextView>(R.id.textArea).text = it.toString()
})
LiveData도 위와 같이 observer를 통해 LiveData의 값을 관찰하여 UI의 데이터를 변경할 수 있다!!!
'Android > JETPACK' 카테고리의 다른 글
[JETPACK개론] Map / SwitchMap (0) | 2022.08.20 |
---|---|
[JETPACK개론] Fragment LiveData / LifeCycleOwner (0) | 2022.08.19 |
[JETPACK개론] LiveData (0) | 2022.08.17 |
[JETPACK개론] ViewModelFactory (0) | 2022.08.16 |
[JETPACK개론] Activity/Fragment 의 ViewModel 공유 (0) | 2022.08.12 |