쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코틀린코테
  • 컴포즈
  • Room
  • 메소드
  • 객체지향
  • Android
  • mvvm
  • 리사이클러뷰
  • 코테
  • 상속
  • 기초100제
  • 코틀린
  • 프로젝트회고
  • 변수
  • Jetpack
  • 자바
  • Kotlin
  • compose
  • DataBinding
  • AAC
  • 백준
  • 코딩테스트
  • livedata
  • workmanager
  • 자료구조
  • ViewModel
  • Adapter
  • 배열
  • 알고리즘
  • 코드업100제

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

Android/JETPACK

[JETPACK개론] LiveData 와 MutableLiveData

2022. 8. 18. 23:59

전 글에서 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의 데이터를 변경할 수 있다!!!

 

 

GitHub - SsongSik/JetPack_Android_Practice: Android practice using the Jetpack library

Android practice using the Jetpack library. Contribute to SsongSik/JetPack_Android_Practice development by creating an account on GitHub.

github.com

 

저작자표시 (새창열림)

'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
    'Android/JETPACK' 카테고리의 다른 글
    • [JETPACK개론] Map / SwitchMap
    • [JETPACK개론] Fragment LiveData / LifeCycleOwner
    • [JETPACK개론] LiveData
    • [JETPACK개론] ViewModelFactory
    쏭식
    쏭식

    티스토리툴바