[Android] LiveData란?

minnie·2022년 1월 5일
0

Jetpack

목록 보기
4/13
post-thumbnail

1. LiveData란?

LiveData는 관찰 가능한 데이터이다.
value라는 속성에 데이터를 유지하고 있으며, 이 데이터의 값이 변경되면 Observer는 알 수 있다.


2. LiveData 특징

LiveData는 안드로이드 생명주기(LifeCycle)를 알고있다.

즉, 액티비티나, 프래그먼트, 서비스 등과 같은 안드로이드 컴포넌트의 생명주기(LifeCycle)를 인식하며 그에 따라 LiveData는 활성상태일때만 데이터를 업데이트(Update)한다.
(-> 활성상태란 STARRED 또는 RESUME을 의미)

또한 LiveData 객체는 Observer 객체와 함께 사용되는데 LiveData가 가지고 있는 데이터에 어떠한 변화가 일어날 경우, LiveData는 등록된 Observer 객체에 변화를 알려주고, Observer의 onChanged() 메소드가 실행된다.

2-1. LiveData가 어떻게 생명주기를 알아요?

바로 LifeCycleOwner이라는 녀석이 안드로이드 생명주기 (Android LifeCycle)를 알고 있는 클래스라 보면 된다.
메서드가 오직 getLifeCycle() 밖에 없는 단일 메소드 인터페이스 클래스 이며, Activity나 Fragment에서 이를 상속하고있다.
한 마디로 LiveData의 Observer 메소드의 LifeCycleOwner를 Activity나 Fragment를 변수로써 사용한다면 각 화면 별 생명주기에 따라 LiveData는 자신의 임무를 수행


3. LiveData 장점

📍 Data와 UI간 동기화

LiveData는 Observer 패턴을 따른다. 그에 따라 LiveData는 안드로이드 생명주기에 데이터 변경이 일어날 때마다 Observer 객체에 준다.
그리고 이 Observer 객체를 사용하면 데이터의 변화가 일어나는 곳마다 매번 UI를 업데이트하는 코드를 작성할 필요 없이 데이터의 상태와 UI를 일치시킬 수 있다.

📍 메모리누수가 없음

Observer 객체는 안드로이드 생명주기 객체와 결합되어 있기 때문에 컴포넌트가 Destroy 될 경우 메모리상에서 스스로 해제

📍 생명주기를 수동으로 처리할 필요 없음

LiveData가 안드로이드 생명주기에 따른 Observing을 자동으로 관리를 해주기 때문에 UI 컴포넌트는 그저 관련 있는 데이터를 "관찰"하기만 하면 된다.

📍 화면 회전, 구성 변경에도 최신 데이터로 즉시 변경

화면 구성이 변경되어도 데이터를 유지한다.
예를 들어, 디바이스를 회전하여 세로에서 가로로 화면이 변경될 경우에도 LiveData는 회전하기 전의 최신 상태를 즉시 받아올 수 있다.


4. 결론

LiveData를 통해서 UI를 업데이트하는 경우 일반적으로 Activity나 Fragment 내에서 직접 선언하는 것보다 ViewModel 내에서 정의하고 호출하여 사용하는 것이 더 좋습니다.

이유는 다들 ViewModel이 뭔지 알고 계시듯이 액티비티와 데이터 간의 결합도를 낮추고(의존성), UI Controller는 오직 data를 display만 하는 것을 수행하게 하는 안드로이드 아키텍처 패턴(디자인)을 유지하기 위해서이다.

LiveData는 단독으로 사용하는 것 보다 Databinding, ViewModel, RoomDatabase, Reactive Programing등과 함께 쓸 경우 그 진가가 발휘되며 개발자는 아주 편하게 코딩이 가능하기 때문에 UI 출력 데이터에 관한 실수 또한 줄여준다.

참고 : https://velog.io/@jojo_devstory/Android-LiveData...%EB%84%8C-%EB%88%84%EA%B5%AC%EB%83%90

profile
Android Developer

0개의 댓글