즉, 수명주기를 반영하면서 값의 변경을 감지하는 데이터 홀더
UI와 데이터 상태의 일치 보장
앱 데이터가 변경될 때마다 관찰자가 대신 UI를 업데이트하므로 개발자가 업데이트할 필요가 없음.
메모리 누수 없음
관찰자는 Lifecycle 객체에 결합되어 있으며 연결된 수명 주기가 끝나면 자동으로 삭제됨.
중지된 활동으로 인한 비정상 종료 없음
활동이 백 스택에 있을 때를 비롯하여 관찰자의 수명 주기가 비활성 상태에 있으면 관찰자는 어떤 LiveData 이벤트도 받지 않음.
최신 데이터 유지
수명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신함.
예를 들어 백그라운드에 있었던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받음.
적절한 구성 변경
기기 회전과 같은 구성 변경으로 인해 활동 또는 프래그먼트가 다시 생성되면 사용 가능한 최신 데이터를 즉시 받음.
리소스 공유
LiveData 객체가 시스템 서비스에 한 번 연결되면 리소스가 필요한 모든 관찰자가 LiveData 객체를 볼 수 있음.
: 데이터의 변경이 발생했을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용한 디자인 패턴
옵져버 패턴을 사용하는 라이브러리
lifecycleOwner 전달
started
or resumed
경우에만 observe 실행 (나머지 속성에서는 비활성화): LiveData를 변형시키기 위한 Class.
map
val userLiveData: LiveData<User> = UserLiveData()
val userName: LiveData<String> = Transformations.map(userLiveData) {
user -> "${user.name} ${user.lastName}"
}
switchMap
private fun getUser(id: String): LiveData<User> {
}
val userId: LiveData<String> = ...
val user = Transformations.switchMap(userId) { id -> getUser(id) }