ViewModel(AAC)내의 데이터들을 LiveData로 관리함으로써 View의 데이터를 항상 최신으로 유지할 수 있도록 도와주는 역할을 수행합니다. 또한 LiveData는 Observer 패턴을 활용하여 Lifecycle에 따르며 데이터를 관리해주는 이름과 같이 실시간 데이터 즉 최신 데이터를 보증하는 특징이 있습니다.
Observer 패턴을 사용하기 때문에 데이터의 변화를 실시간으로 구독자에게 통지할 수 있습니다.
Activity/Fragment의 Lifecycle을 따라 동작하기 때문에 Memory leak이 발생하지않습니다. -> 연결된 컴포넌트의 수명주기가 끝나면 LiveData도 자동으로 삭제됩니다.
AAC ViewModel에서 사용하기 때문에 화면의 회전이 일어나도 데이터가 보존됩니다.
활동 중지로 인한 충돌 없음 -> 백 스택의 활동과 같이 관찰자의 수명주기가 비활성 상태이면 LiveData 이벤트를 받지않습니다.
나중에 코틀린에 대한 글을 작성할 예정인데 코틀린에는 Mutable이라는 키워드를 사용하는 이러한 키워드로 변경될 수 있는 데이터와 변경될 수 없는 데이터를 명확히 구분하여 변경되어선 안 될 데이터가 의도와 다르게 변경되는 등의 상황을 방지하기 위함이다.
LiveData에서도 마찬가지로 MutableLiveData는 GET/SET이 모두 가능하고 LiveData는 GET만 가능하다.
LiveData의 경우 MVVM 패턴에서 가장 중요한 역할을 합니다. 그 이유는 MVVM에서 View와 ViewModel을 역할을 구분할 수 있기 때문입니다. MVVM에서는 View는 비즈니스 로직 보다는 단순히 사용자에게 데이터를 보여주는 역할만 해야하기 때문입니다. 그렇다고 위의 사항을 강제하는 것은 아닙니다. EditText나 SeekBar와 같이 사용자가 보면서 설정하거나 값을 입력하는 경우가 존재하기 때문입니다.
MediatorLiveData :다른 LiveData를 관찰하고 onChange() 이벤트에 반응할 수 있습니다. MediatorLiveData는 특정 작업을 수행하려는 시점 또는 이벤트를 전파하려는 시점에 대한 제어를 제공합니다.
SingleLiveEvent: MutableLiveData의 하위 클래스로 View의 생명주기를 인식하고 단일 Observer로 데이터를 관찰할 수 있습니니다. 사용하는 경우는 유효성 검사를 수행하거나 서버 호출 중에 진행률 표시줄을 표시하기 위해, 특정 보기를 클릭하여 UI업데이트를 수행해야 하는 경우와 같은 일부 시나리오에서 사용합니다.
정보에 대해 많은 연산자를 사용해야하는경우 -> LiveData가 Transformations와 같은 도구를 제공하지만 도움이 되는 Map 및 swichMap만 있습니다.
정보와 UI 상호 작용이 없을경우
캐시된 정보를 UI에 유지할 필요가 없을 때