[Android] Android Jetpack LiveData? 살펴보기!

Kenneths
Kenneth Android
Published in
3 min readDec 9, 2020
photo by kenneth

LiveData는 옵저버(관찰자) 패턴을 기본으로 하는 컴포넌트입니다. 읽기전 옵저버 패턴이란 무엇인지 간단하게 알아보시면 좋을 것 같습니다.

What is LiveData?

LiveData는 수명주기를 인식하여 활성 상태에 있는 관찰자들 에게만 업데이트 하는 데이터 홀더 클래스입니다.

LifeCycle의 상태는 크게 5가지 상태로 존재합니다

  • CREATED
  • DESTROYED
  • INITIALIZED
  • RESUMED
  • STARTED

LiveData는 LifeCycle의 상태가 STARTED와 RESUMED이면 업데이트 정보를 알립니다.

LiveData 활성상태도.. 판단해서 업데이트해주고 그럼 어떤 장점이 있길래 이것을 쓸까요?

장점

  • UI와 데이터 일치성 보장
  • 최신 데이터 유지(화면에 의한 Fragment 재생성시)
  • 메모리 누수 없음
  • 비정상 종료 없음

이러한 강력한 장점때문에 LiveData 를 쓰지 않을 이유는 없을 것 같습니다

사용방법

LiveData 객체는 일반적으로 ViewModel 객채 내에서 초기화하여 사용합니다

액티비티 경우에서는 onCreate()에서 obserev를 합니다

Fragment에서 옵저빙할 때 조심해야 할 부분이 있습니다.

구글도 실수했고 검색해보면 많이 나오지만 Fragment에서는 lifeCycle 대상으로 this(Lifecyle) 대신에 LifeCycleOwner를 사용합니다. this(Lifecyle)로 관찰을하게 된다면 파괴되고 다시 생성되는 Fragment 특성상 중첩된 관찰 때문에 이벤트가 다중으로 발생한다는 문제가 있습니다.

viewLifeCycleOwner

현재 this를해도 빌드가 실패하진 않지만 빨간색으로 에러처리로 사용하지 말 것을 권고하고 있습니다.

그럼 observe 로 관찰을 시작했고 이벤트를 보내줘야겠죠?

LiveData로 관찰자 대상에게 이벤트를 보내는 방식은 2가지가 있습니다

  • setValue
  • postValue

워커쓰레드에서 setValue 호출시
IllegalStateException: Cannot invoke setValue on a background thread 에러를 가 발생됩니다.

LiveData 에 값을 설정할 때 해당 스코프가 메인쓰레드인지 워커쓰레드인지 잘 구분하고 사용해야 합니다.

LiveDataCoroutine , MediataLiveData , Room , DataBidning 등 AAC와 호환이 잘 되어있는 이점이 있습니다. 다음 포스팅에서는 LiveData 를 활용한 컴포넌트와의 상호작용을 다루겠습니다.

--

--

Kenneths
Kenneth Android

사용자들에게 편리하고 AweSome UI, UX를 경험해주고 싶은 상위 티어 개발자가 되고싶어 달려가고있는 개발자입니다. 다양한 내용들을 공유하려고 합니다.