1. LiveData란?

thsamajiki·2023년 2월 18일
0

LiveData

목록 보기
1/1

LiveData의 정의

LiveData는 관찰 가능한 Data Holder 클래스이다.
일반적인 Observable과는 다르게 LiveData는 LifeCycle을 알고 있으며,
Observer 객체를 함께 사용한다.

이러한 속성 때문에 2가지 특징이 있다.

Activity, Fragment와 같은 컴포넌트의 생명주기를 인식하여 active한 상태일 때만 데이터를 업데이트한다.
LiveData는 등록된 Observer 객체에 변화를 알려주고, Observer의 onChanged() 메소드가 실행된다.



왜 LiveData를 쓸까?

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

LiveData는 관찰자 패턴을 따른다. 구성요소의 수명주기가 변경될 때마다 Observer 객체에 알린다.
따라서 이러한 Observer 객체(주로 UI 구성요소)에 UI를 업데이트 할 수 있다.

2. 최신 데이터 유지

수명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신한다.
예를 들면, 백그라운드에 있었던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받는다.

3. 수명 주기를 더 이상 수동으로 처리하지 않음

UI 구성요소는 관련 데이터를 관찰하기만 할 뿐 관찰을 중지하거나 다시 시작하지 않는다.
LiveData는 관찰하는 동안 관련 수명 주기 상태의 변경을 인식하므로 이 모든 것을 자동으로 관리한다.



LiveData의 장점

위와 같은 특징으로 인해 LiveData는 다음과 같은 장점을 갖는다.

  1. 메모리 누수 없는 사용을 보장
    LiveData는 lifeCycle은 Observer의 lifeCycle을 따라가고 Observer는 해당하는 컴포넌트의 생명주기와 결합되기 때문에 해당 컴포넌트가 Destory 될 경우 메모리상에서 스스로 해제한다.
  1. 항상 최신 데이터를 유지한다.
    LiveData는 Observer 패턴을 사용하여 자동으로 데이터가 업데이트 되기 때문에 추가적인 코드 없이 UI는 항상 최신화된 데이터 상태를 가질 수 있다.
  1. Stop 상태의 Activity와 Crash가 발생하지 않는다.
    Observer의 생명 주기가 inactive일 경우, Observer는 LiveData의 어떤 이벤트도 수신하지 않는다. (Observer의 생명주기는 해당 View의 생명주기와 결합)



LiveData 단점

  1. 비동기 데이터 스트림을 처리하기에 적합하지 않다.
    LiveData의 관찰은 오직 Main Thread에서만 진행되기 때문에 Android 클린 아키텍처의 Data Layer에서 LiveData를 사용해서 데이터 스트림을 처리하려고 하면 한계가 생긴다.
  1. Domain Layer에 사용하기 적합하지 않다.
    일반적으로 Android 클린 아키텍처의 Domain Layer는 의존성을 가지지 않는 순수한 Kotlin/Java로 되어있는 레이어이다. 하지만 LiveData는 AAC 라이브러리이기 때문에 해당하는 모듈을 추가해주어야 하는 문제가 있다.
  1. 오직 한번만 변경된 데이터를 관찰해야 할 경우 문제가 생길 수 있다.
    기본적으로 LiveData는 변경된 데이터가 뷰의 재생성에 따라 여러 번 사용할 수 있기 때문에 한 번만 떠야 하는 경우 문제가 발생할 수 있다.(Dialog, Toast, SnackBar) 이를 해결하기 위해 SingleLiveData를 사용한다.
profile
안드로이드 개발자

0개의 댓글