[Android] LiveData(AAC)

HEETAE HEO·2022년 5월 25일
0
post-thumbnail

LiveData란

ViewModel(AAC)내의 데이터들을 LiveData로 관리함으로써 View의 데이터를 항상 최신으로 유지할 수 있도록 도와주는 역할을 수행합니다. 또한 LiveData는 Observer 패턴을 활용하여 Lifecycle에 따르며 데이터를 관리해주는 이름과 같이 실시간 데이터 즉 최신 데이터를 보증하는 특징이 있습니다.

LiveData의 장점

  1. Observer 패턴을 사용하기 때문에 데이터의 변화를 실시간으로 구독자에게 통지할 수 있습니다.

  2. Activity/Fragment의 Lifecycle을 따라 동작하기 때문에 Memory leak이 발생하지않습니다. -> 연결된 컴포넌트의 수명주기가 끝나면 LiveData도 자동으로 삭제됩니다.

  3. AAC ViewModel에서 사용하기 때문에 화면의 회전이 일어나도 데이터가 보존됩니다.

  4. 활동 중지로 인한 충돌 없음 -> 백 스택의 활동과 같이 관찰자의 수명주기가 비활성 상태이면 LiveData 이벤트를 받지않습니다.

MutableLiveData vs 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를 사용하지 말아야하는 경우

  1. 정보에 대해 많은 연산자를 사용해야하는경우 -> LiveData가 Transformations와 같은 도구를 제공하지만 도움이 되는 Map 및 swichMap만 있습니다.

  2. 정보와 UI 상호 작용이 없을경우

  3. 캐시된 정보를 UI에 유지할 필요가 없을 때

profile
Android 개발 잘하고 싶어요!!!

0개의 댓글