이번 포스팅에서는 AAC 의 일부인 LiveData 에 대해 알아보고자 한다.
LiveData 의 여러 특징 중 가장 핵심적이고 독보적인 특징을 하나 뽑자면 수명 주기를 인식한다는 것이다. LiveData 는 관찰자 패턴을 기반으로 만들어진 라이브러리로 STARTED
, RESUMED
상태인 관찰자에게만 알림을 보내주고 DESTORYED
가 된 관찰자는 자동으로 삭제한다.
위의 특징과 함께 LiveData 는 여러 장점이 있다.
DESTORYED
된 관찰자는 자동으로 삭제하기 때문에 메모리 누수가 없다.일반적으로 LiveData는 데이터가 변경될 때 활성 관찰자에게만 업데이트를 전달합니다. 이 동작의 예외로, 관찰자가 비활성에서 활성 상태로 변경될 때에도 관찰자가 업데이트를 받습니다. 또한 관찰자가 비활성에서 활성 상태로 두 번째로 변경되면, 마지막으로 활성 상태가 된 이후 값이 변경된 경우에만 업데이트를 받습니다.
위의 글은 세 번째 장점의 이유를 뒷받침할 수 있다고 생각해서 공식 홈페이지에서 가져온 글이다.
이제 필자 기준에서 LiveData 에 특징에 대해 몇 가지만 더 알아보자.
observeForever(Observer)
메서드는 생명주기를 인식하지 않고 항상 알림을 받게 할 수도 있다. 더 이상 알림을 받고 싶지 않다면 removeObserver(Observer)
메서드를 사용하면 된다.
처음에 LiveData 의 데이터는 설정되지 않기 때문에 값을 얻는 메서드의 반환값은 nullable
하다.
LiveData 는 onCreate
메서드에서 사용하는 것을 권장하는데, 이는 onResume
과 같이 중복 호출되는 경우를 방지하기 위함과 관찰자가 활성화 상태인 즉시 알림을 주기 위해서이다.
MutableLiveData
와 LiveData
의 차이는 LiveData
의 경우 값을 설정할 수 있는 메서드가 public
으로 제공되지 않는다.
이제 막 LiveData 가 무엇인지 알게 되었기 때문에 비동기 처리방식이나 확장해서 사용하는 방법의 경우는 생략했다. (추후에 포스팅할 기회가 올 것이다.)
LiveData 를 공부하기 전에 관찰자 패턴에 대해 선행학습을 하면 LiveData 가 동작하는 과정을 좀 더 쉽게 이해할 수 있다. (필자도 관찰자 패턴에 대한 사전지식이 얕게 있었는데 더 깊게 알아봐야겠다.)
오늘도 역시 성장했다.