[Android] LiveData 파헤치기

ansehun·2022년 12월 13일
0
post-thumbnail

개요

JetPack와 MVVM 패턴을 공부하게 되면 LiveData가 정말 많이 나오는 것을 확인 할 수 있다. 오늘은 이 친구에 대해서 삿삿히 살펴보려고 한다!

정의

  • 관찰 가능한 Data holder 클래스
  • Observer 패턴을 활용하고 Activity나 Fragment의 Lifecycle에 따르며 항상 최신의 데이터를 보증한다.
    (Observer 패턴을 아직 공부하지 못했기에 우선 활용한다는 사실만 인지해야겠다)

장점

  • Observer 패턴을 사용하기 때문에 데이터 변화를 실시간으로 View에게 전달함.
  • Activity와 Fragment의 Lifecycle에 따라 동작하기 때문에 수명 주기가 끝나도 메모리 릭이 발생하지 않는다.
  • 화면을 회전시켜도 항상 최신의 데이터를 유지하기 때문에 View의 데이터가 날라가지 않는다.

LiveData 사용법


class LoadDetailViewModel : ViewModel() {

    private val _liveData = MutableLiveData<String>()
    val liveData: LiveData<String> 
				get() = _liveData

    fun loadData() = viewModelScope.launch {
        _liveData.setValue("value1")
        _liveData.postValue("value2")
    }
}

MutableLiveData VS LiveData

  • MutableLiveData: Read/Write가 모두 가능한 LiveData로 GET/SET이 모두 가능함.
  • LiveData: Read만 가능한 LiveData로 GET만 가능함.

❓ 왜 LiveData는 최신의 데이터를 유지해야하는데 Write만 가능할 필요가 있을까?

View와 ViewModel을 완전히 나누어 역할을 구분하기 위해서 위와 같이 나누었다. ViewModel에서는 항상 최신의 데이터를 유지하기 위해 LiveData를 업데이트하지만 View는 ViewModel의 데이터 변화를 인지하고 UI로 보여주는 역할을 합니다.

LiveData의 데이터 변경 방법

  • 메인 스레드로 값을 처리하는 것을 알 수 있음.
    - setValue(): 메인 스레드에서 값을 업데이터 함.
    - postValue(): 메인 스레드가 아닌 Dispatcher.IO에서 값을 업데이트하고 메인 스레드로 데이터를 전달
  • 항상 최신의 값을 유지하기 때문에 마지막 Value가 저장됨.
  • 여러 가지 value가 필요하다면 하나의 LiveData가 아닌 여러 개의 LiveData를 두는 방법을 선택해야 함.

❓ LiveData를 사용하면 안되는 경우

  • Repository에서 데이터를 가져올 때 LiveData를 사용하는 경우
  • UI 업데이터 목적으로 사용되지 않는 LiveData를 사용하는 경우
    -> 메인 스레드로 값을 처리하기 때문에 목적에 맞지 않는다.

0개의 댓글