사진/내용
LiveData
Android JetPack 라이브러리의 하나의 기능으로 Data의 변경을 관찰 할 수 있는 Data Holder 클래스이다.
일반적인 Observable과는 다르게 LiveData는 안드로이드 생명주기(LifeCycle)를 알고 있다.
즉, 액티비티나, 프레그먼트, 서비스 등과 같은 안드로이드 컴포넌트의 생명주기를 인식하며 그에따라 LiveData는 활성상태일때만 데이터를 업데이트 한다.
활성상태란 STARTED 또는 RESUMED를 의미함
LiveData 객체는 Observer 객체와 함께 사용된다. LiveData가 가지고 있는 데이터에 어떠한 변화가 일어날 경우, LiveData는 등록된 Observer 객체에 변화를 알려주고, Observer의 onChanged() 메소드가 실행된다.
Live Data가 생명주기를 알 수 있는 이유: LifeCycleOwner가 안드로이드 생명주기를 알고 있는 클래스이다. 메서드가 오직 getLifeCycle() 밖에 없는 단일 메소드 인터페이스 클래스이며, Activity나 Fragment에서 이를 상속하고 있다.
LiveData의 Observer 메소드의 LifeCycleOwner를 Activity나 Fragment를 변수로써 사용한다면 각 화면 별 생명주기에 따라 LiveData는 자신의 임무를 수행한다. (내용 추가 필요)
LiveData를 사용의 장점
• Data와 UI간 동기화
LiveData는 Observer 패턴을 따른다. 이에 따라 LiveData는 안드로이드 생명주기에 데이터 변경이 일어날 때마다 Observer 객체에 알려준다. 그리고 이 Observer 객체를 사용하면 데이터의 변화가 일어나는 곳마다 매번 UI를 업데이트하는 코드를 작성할 필요 없이 통합적이고 확실하게 데이터의 상태와 UI를 일치시킬 수 있다.
• 메모리 누수(Memory Leak)가 없다.
Observer 객체는 안드로이드 생명주기 객체와 결합되어 있기 때문에 컴포넌트가 Destroy 될 경우(LifecycleOwner의 상태가 Lifecycle.State.DESTROYED) 메모리상에서 스스로 해제한다.
• Stop 상태의 액티비티와 Crash가 발생하지 않는다.
액티비티가 Back Stack에 있는 것처럼 Observer의 생명주기가 비활성화일 경우, Observer는 LiveData의 어떤 이벤트도 수신하지 않는다.
• 생명주기에 대한 추가적인 handling을 하지 않아도 된다.
LiveData가 안드로이드 생명주기에 따른 Observing을 자동으로 관리를 해주기 때문에 UI 컴포넌트는 그저 관련 있는 데이터를 관찰하기만 하면 된다.
• 항상 최신 데이터를 유지한다.
화면 구성이 변경되어도 데이터를 유지한다. 예를 들어, 디바이스를 회전하여 세로에서 가로로 화면이 변경될 경우에도 LiveData는 회전하기 전의 최신 상태를 즉시 받아온다.
• 자원를 공유할 수 있다.
LiveData를 상속하여 자신만의 LiveData클래스를 구현할 수 있고 싱글톤 패턴을 이용하여 시스템 서비스를 둘러싸면 앱 어디에서나 자원을 공유할 수 있다.