LiveData

홍승범·2023년 5월 27일
0

Android

목록 보기
9/9

LiveData

관찰 가능한 데이터 홀더 클래스로서, 액티비티, 프래그먼트, 서비스등 다른 앱 구성요소의 수명주기를 인식하고, 수명주기가 활성상태인 구성요소의 관찰자만 업데이트해주는 역할을 한다.
- 옵저버 패턴을 활용해 구성요소의 수명주기에 따라 데이터를 관리
- 항상 최신 데이터를 보증한다
- 관찰자의 수명 주기가 STARTED, RESUMED상태를 활성상태로 간주하고, 활성된 관찰자에게만 업데이트
- LifeCycleOwner인터페이스를 구현하는 객체와 페어링 된 옵저버를 등록하고, DESTROYED상태가 되면 옵저버를 삭제한다

장점

  1. UI와 데이터 상태의 일치

    • 옵저버 패턴을 따르며, 데이터가 변경 될 때 옵저버 객체에 알림
    • 옵저버에 UI 업데이트 코드를 작성하여 데이터가 변경되면 자동으로 UI가 업데이트 됨
  2. 메모리 누수 없음

    • 옵저버는 LifeCycle객체에 결합되어 있으며, 연결된 수명주기가 끝나면 자동으로 삭제됨
  3. 중지된 활동으로 인한 비정상 종룔 없음

    • 관찰자의 수명주기가 비활성 상태면 관찰자는 어떤 이벤트도 받지 않음
  4. 수명주기 상태 변경을 자동으로 관리함

  5. 최신데이터 유지

    • 수명주기가 다시 활성상태가 될 때 최신 데이터를 수신
    • 즉 기기회전등으로 인해 액티비티나 프래그먼트가 다시 생성되어도 최신 데이터를 수신하게 됨

Live Data의 적용

  1. MutableLiveData/LiveData
    • MutableLiveData는 get/set이 모두 가능
    • LiveData 는 get만 가능
  2. 항상 UI 업데이트를 목적으로만 사용해야 함
    • MutableLiveData의 set은 setValue' / 'postValue의 두가지가 있다
    • setValue : MainThread에서의 접근이 보장될 때만 사용. 아니라면 런타임 오류가 발생
    • postValue : postToMainThread를 통해 MainThread로 값을 전달함
    • 따라서 데이터의 처리가 MainThread가 아닌 스레드에서 발생하는 경우에는 LiveData를 사용하지 않는것이 맞다
  3. 적용
    • 보통 onCreate에서 관찰을 시작. onResume등 중복 호출되는 부분을 피하기 위해서이기도 하고, 액티비티나 프래그먼트가 활성화되는 즉시 표시할 수 있는 데이터가 포함되도록 하기 위함
    • LifeCycleOwner를 통해 수명주기를 관찰하고, LifeCycleOwner는 ViewModel과 통신이 가능함. 이때 ViewModel은 기본적으로 UI에 관련된 데이터를 로드하고 관리하는 역할을 하므로, ViewModel이 LiveData 객체를 보유하는데 적합하다.
profile
그냥 사람

0개의 댓글