[Android] LiveData

kldaji·2021년 9월 8일
0

서론

이번 포스팅에서는 AAC 의 일부인 LiveData 에 대해 알아보고자 한다.

본론

LiveData 의 여러 특징 중 가장 핵심적이고 독보적인 특징을 하나 뽑자면 수명 주기를 인식한다는 것이다. LiveData 는 관찰자 패턴을 기반으로 만들어진 라이브러리로 STARTED, RESUMED 상태인 관찰자에게만 알림을 보내주고 DESTORYED 가 된 관찰자는 자동으로 삭제한다.
위의 특징과 함께 LiveData 는 여러 장점이 있다.

  1. 관찰 대상의 값이 바뀌면 관찰자에게 즉시 알리기 때문에 UI 데이터 상태의 일치를 항상 보장할 수 있다.
  2. DESTORYED 된 관찰자는 자동으로 삭제하기 때문에 메모리 누수가 없다.
  3. 백그라운드에서 포그라운드로 돌아오는 수명주기를 인식하기 때문에 최신 데이터를 항상 유지한다. (이는 기기 회전으로 인해 액티비티 또는 프레그먼트가 재생성 되어도 최신 데이터를 항상 유지시켜준다.)

일반적으로 LiveData는 데이터가 변경될 때 활성 관찰자에게만 업데이트를 전달합니다. 이 동작의 예외로, 관찰자가 비활성에서 활성 상태로 변경될 때에도 관찰자가 업데이트를 받습니다. 또한 관찰자가 비활성에서 활성 상태로 두 번째로 변경되면, 마지막으로 활성 상태가 된 이후 값이 변경된 경우에만 업데이트를 받습니다.

위의 글은 세 번째 장점의 이유를 뒷받침할 수 있다고 생각해서 공식 홈페이지에서 가져온 글이다.

이제 필자 기준에서 LiveData 에 특징에 대해 몇 가지만 더 알아보자.

  1. observeForever(Observer) 메서드는 생명주기를 인식하지 않고 항상 알림을 받게 할 수도 있다. 더 이상 알림을 받고 싶지 않다면 removeObserver(Observer) 메서드를 사용하면 된다.

  2. 처음에 LiveData 의 데이터는 설정되지 않기 때문에 값을 얻는 메서드의 반환값은 nullable 하다.

  3. LiveData 는 onCreate 메서드에서 사용하는 것을 권장하는데, 이는 onResume 과 같이 중복 호출되는 경우를 방지하기 위함과 관찰자가 활성화 상태인 즉시 알림을 주기 위해서이다.

  4. MutableLiveDataLiveData 의 차이는 LiveData 의 경우 값을 설정할 수 있는 메서드가 public 으로 제공되지 않는다.

결론

이제 막 LiveData 가 무엇인지 알게 되었기 때문에 비동기 처리방식이나 확장해서 사용하는 방법의 경우는 생략했다. (추후에 포스팅할 기회가 올 것이다.)
LiveData 를 공부하기 전에 관찰자 패턴에 대해 선행학습을 하면 LiveData 가 동작하는 과정을 좀 더 쉽게 이해할 수 있다. (필자도 관찰자 패턴에 대한 사전지식이 얕게 있었는데 더 깊게 알아봐야겠다.)

오늘도 역시 성장했다.

Reference

LiveData

profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.

0개의 댓글