[Android/Kotlin] LiveData
📌 LiveData
- 관찰 가능한 데이터 홀더 클래스
- 일반 클래스와 달리 LiveData는 생명 주기를 인식, Acitivty, Fragment, Service 등 다른 앱 구성요소의 수명 주기를 고려
- 생명 주기 인식을 통해 LiveData는 활동 수명 주기 상태에 있는 앱 구성요소 observer(관찰자)만 업데이트
생명주기
Observer
클래스로 표현되는 관찰자의 수명 주기가 STARTED
또는 RESUMED
상태이면 LiveData는 관찰자를 활성 상태로 간주한다.
⭐️ 화면이 살아있을 때만 Observing이 활성화 되고 화면이 죽었을때는 Observing이 활성화 되지 않는다. ⭐️
LiveData는 활성 관찰자에게만 업데이트 정보를 알린다. LiveData
객체를 보기 위해 등록된 비활성 관찰자는 변경사항에 관한 알림을 받지 않는다.
주요 이점
⭐️ LiveData는 사용되지 않을 때 자동으로 observing을 해제했다가 사용될 때 다시 observe한다. ⭐️
- 따라서 불필요한 observing이 사라지고 이로인해 메모리 누수의 위험이 사라진다.
- 생명주기와 연결되며
DESTROYED
시점에 자동 삭제함
- 생명주기와 연결되며
- 생명 주기를 더 이상 수동으로 처리하지 않음
- 최신 데이터 유지 (UI와 데이터 상태 일치 보장)
- 생명 주기가 비활성화 > 다시 활성화될 때 최신 데이터를 수심함
사용방법 예시
class NameViewModel : ViewModel() {
private val _list: MutableLiveData<...> = MutableLiveData()
val list: LiveData<...> get() = _list
private fun load() {
_list.value = listOf(...)
}
}
class NameActivity : AppCompatActivity() {
private val viewModel: NameViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.list.observe(this) { list ->
...
}
}
}
class NameFragment : Fragment() {
private val viewModel: NameViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.list.observe(viewLifecycleOwner) { list ->
...
}
}
}