본문 바로가기

안드로이드

[안드로이드] LiveData에 대해 알아보자

Intro

오늘은 LiveData에 대해서 알아볼거다. 여러 블로그에서 나온것과 같이 dataBinding에 대해서 미리 알아두면 좋지만, LiveData를 알고 dataBinding을 들어가면 더 순조로울 것 같아서 나는 그냥 LiveData에 대해서 먼저 알아볼 것이다.

Basis

안드로이드 개발자 문서에서 LiveData에 대하여 찾아보면 눈에 띄는 2가지 특징이 보인다.
  1. LiveData는 실시간으로 데이터가 변경되는걸 observable할 수 있는 데이터 holder class다.
    쉽게 말하면 데이터가 바뀌면 데이터 바뀌는걸 알아차릴 수 있다는 소리다.
  2. LiveData는 생명주기를 인식하고 있다. 따라서 현재 내가 실행중인 activity나 fragment의 데이터가 변경되면 실시간으로 이를 감지하고 업데이트 시킨다. 달리 말하면 다른 activity나 fragment에서 데이터 변동이 일어나도 해당 view가 실행되고 있는 상태가 아니라면 데이터를 update 시키지 않는다.

Advantages

LiveData를 Basis에서 설명했는데, 그럼 이걸 사용하면 뭐가 좋길래 사용하면 좋은지는 다음과 같다.
  1. 현재 data 상태가 UI에 표현되는 정보와 일치한다. 안드로이드 문서에 따르면, LiveData는 observer 패턴을 따르기 때문에, 실시간으로 데이터 변동을 인지하고 이를 UI에 반영해준다. 이게 장점인 이유는 데이터가 변동될 때마다 UI에 업데이트 해주는 코드를 따로 작성하지 않아도 자동으로 UI에 이를 반영해주기 때문에 굉장한 이점이 되는 것이다.
  2. LiveData가 생명주기를 인식한다.
    Basis에서 말했 듯, LiveData는 생명주기를 인식하고 있다. 그렇기에 생명주기에서 현재 view가 destroy되면, Observer 객체도 자연스럽게 clean up이 된다. 그래서 메모리 누수가 일어나지 않는다.그리고 LiveData가 생명주기를 인식하기 때문에, 생명주기 handling을 자동으로 해줘서 굳이 개발자가 해주지 않아도 된다.
  3. 또한 현재 activity가 back stack으로 간 경우, 포괄적으로는 observer의 생명주기가 활동하지 않으면(inactive), observer는 LiveData 관련 이벤트를 수신하지 않아서 activity간 충돌하여 ANR이 발생하지 않는다. 그리고 라이프 사이클이 비활성화 상태에서 활성화 상태로 변경될 때 최신 데이터를 받아오기 때문에 항상 데이터가 최신의 상태로 업데이트 시켜준다. 예를들어 화면 구성이 변경되는 작업(디바이스 회전 등)이 발생하면 activity나 fragment가 재생성되기 때문에, 최신 데이터를 받아오는 것이다.
  1. 리소스 공유
    LiveData 객체를 싱그톤 패턴으로 만든다면, 앱 내에서 LiveData 객체를 공유할 수 있다. 그래서 observer는 메모리 공간에 선언된 LiveData 객체를 참조할 수 있기 때문에 쉽게 리소스를 공유할 수 있다.

fine

사실 LiveData는 dataBinding, MVVM 패턴, Room 라이브러리 등과 같이 보면 좋은 것이다. 그래서 찬찬히 나머지 것들을 정리해 볼것이다. 그리고 예제는 더 나중에 작성을 할 것이다.

글 참조

https://developer.android.com/topic/libraries/architecture/livedata?hl=us
https://velog.io/@jojo_devstory/Android-LiveData...%EB%84%8C-%EB%88%84%EA%B5%AC%EB%83%90