본문 바로가기

Android/Kotlin

Live Data에 대해 알아보기.

반응형

안녕하세요 오늘은 Live Data에 대해 알아보려고 합니다.

우선 라이브 데이터란 무엇이냐!?

구글 디벨로퍼(https://developer.android.com/topic/libraries/architecture/livedata)에 나와있는 설명입니다.

 

LiveDatais an observable data holder class. Unlike a regular observable, LiveData is lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, fragments, or services. This awareness ensures LiveData only updates app component observers that are in an active lifecycle state.

LiveData considers an observer, which is represented by theObserverclass, to be in an active state if its lifecycle is in theSTARTEDorRESUMEDstate. LiveData only notifies active observers about updates. Inactive observers registered to watchLiveDataobjects aren't notified about changes.

You can register an observer paired with an object that implements theLifecycleOwnerinterface. This relationship allows the observer to be removed when the state of the correspondingLifecycleobject changes toDESTROYED. This is especially useful for activities and fragments because they can safely observeLiveDataobjects and not worry about leaks—activities and fragments are instantly unsubscribed when their lifecycles are destroyed.

 

번역하자면,

(발로 번역한거니 참고만...)

"라이브 데이터는 옵저버블 데이터 홀더 클래스이다. 일반적인 옵저버블과 다르게, 라이브 데이터는 라이프싸이클을 알고 있고, 다른 앱 컴포넌트인 액티비티, 프레그먼트 또는 서비스와 같은 것들의 라이프 사이클에 의존한다. 이 인식은 LiveData가 활성 생명주기 상태에 있는 앱 컴포넌트 옵저버만 업데이트하도록 보장합니다.

~~~ 만약 생명주기가 STARTED or RESUMED 상태라면 활성상태로 여겨진다. 라이브데이터는 업데이트에 대해서 활성 상태일때만 알리고 비활성 상태일때는 라이브데이터 옵저버가 관찰하고 있는 것에 대해 저장만 하고 변화에 대해 알리지 않는다.

~~~ 이 관계는 생명주기 상태가 DESTROYED로 변할 때 옵저버가 제거되기를 허가합니다. 이건 액티비티와 프레그먼트에 대해 효과적으로 사용 가능하다. 왜냐하면 라이브데이터 객체를 안전하게 관찰할 수 있고 누출에 대해 걱정할 필요가 없기 떄문이다. -이들의 생명주기가 파괴될 때 즉시 구독취소가 된다.-"

즉, 우리가 흔히 쓰는 "뷰"의 라이프사이클을 알고 있는 "데이터 클래스"로, 생명주기를 알고 있으니 매우 효과적으로 사용할 수 있으며 안전하다고 볼 수 있겠네요.

(여태껏 안사용하고 뭐했지...?)

 

 

 

장점으로는 아래와 같습니다.

  1. UI가 데이터 상태와 일치하는지 확인
    1. 라이브 데이터는 옵저버 패턴을 따르고 생명주기 상태가 변할 때 옵저버 객체에 알립니다. 앱 데이터가 변경 될 때마다 매번 UI를 업데이트하는 대신 관찰자가 변경 사항이있을 때마다 UI를 업데이트 할 수 있습니다.
  2. 메모리 누출이 없음
    1. 생명주기에 따르니, destroyed될 때 같이 clean 된다.
  3. 액티비티들이 stop되기 때문에 충돌이 없다.
    1. 만약 옵저버의 생명주기가 비활성화라면, 어떤 라이브 데이터 이벤트도 받지 못한다.
  4. 더 이상 수동적으로 생명주기를 다루지 않는다.
    1. UI 컴포넌트는 관련있는 데이터를 관측만 하고 관측을 stop 허거나 resume하지 않습니다. 라이브 데이터는 관측을 하는 동안 관련있는 생명주기 상태를 인식하고 있기 때문에 모든 것을 자동으로 관리합니다.
  5. 항상 최신 데이터를 다룹니다.
    1. 만약 생명주기가 비활성화라면, 그것은 다시 활성화 될 때의 최신 데이터를 받습니다.
  6. 적절한 구성을 변경합니다.
    1. 만약 액티비티 또는 프레그먼트가 디바이스 화면전환과 같이, 구성 변경으로 재생성이 된다면, 그것은 가장 최신의 이용 가능한 데이터를 받습니다.
  7. 자원 공유
    1. 자원들을 앱에서 공유할 수 있기 위해 시스템 서비스를 둘러싸는 싱글톤 패턴을 사용하여 라이브 데이터 객체를 확장해 사용할 수 있습니다.

 

위와 같이 7개의 장점들이 있습니다.

 

 

라이브 데이터 객체를 작동하기 위해선 3가지 단계가 있습니다.

  1. 확실한 데이터 타입의 라이브 데이터의 인스턴스를 생성합니다. 이것은 일반적으로 "View Model" 클래스 안에서 생성됩니다.
  2. 라이브 데이터 객체가 데이터 변화를 잡을 때 발생하는 것을 control하는 onChanged() 메서드를 정의하는 옵저버 객체를 생성합니다. 일반적으로 액티비티 또는 프레그먼트와 같이 UI 컨트롤러 안에서 옵저버 객체를 생성합니다.
  3. observe() 메서드를 사용하는 라이브데이터 객체에 옵저버 객체를 붙입니다. observe() 메서드는 LifecycleOwner 객체를 따릅니다. 이것은 변화의 알림을 위해 라이브 데이터 객체에 옵저버 객체를 구독합니다. 일반적으로 액티비티 또는 프레그먼트와 같은 UI 컨트롤러에서 옵저버 객체를 붙입니다.

 

정말 .... 오랜만에 영어 번역하니 발로 했나 싶네요... 공부하고 다시 번역해볼게요...

 

아래는 구글 쌤플입니다. clone하셔서 하나씩 따라해보시면 이해가 가실거에요!

https://github.com/googlesamples/android-architecture-components/tree/master/BasicSample

 

googlesamples/android-architecture-components

Samples for Android Architecture Components. . Contribute to googlesamples/android-architecture-components development by creating an account on GitHub.

github.com

 

위 깃헙보면서 썜플 예제를 만들던, 설명하던 하는 것들은 다음에 올리겠습니다... 이해가 어렵지만...

 

 

제 생각을 정리해보겠습니다.

 

 

1. LiveData는 꼭 써야한다. => RxJava를 쓰기 전(아마 후에도...?), 콜백 지옥을 벗어나기 위한 가장 좋은 방법인 것 같습니다.

2. 사용하기에 "데이터 바인딩"을 꼭 같이 이용하자. => 데바를 사용하는 습관을 들여놔야 합니다. 추후 MVVM 패턴 등을 쓸 때 필요하고, UI 변경 등 편하기 때문이죠. 

 

 

이상입니다. 정말 개발 번역이지만 디벨롭을 보기 싫으신 분들에겐 괜찮을거같습니다.

 

해당 주제에 대한 예제는 다음 이시간에 올리겠습니다....!!!

반응형