티스토리 뷰

반응형

앞서 살펴본 MVVM 패턴([Android] 아키텍처 패턴 - MVC, MVP, MVVM 글 참고)을 안드로이드 앱에 구현하기 위해 사용하는 Android Jetpack의 컴포넌트 중 하나인 LiveData에 대해 알아보자.

라이브 데이터란?

라이브 데이터는 데이터의 변경을 관찰할 수 있는 data holder 클래스로 activity, fragment, service 등 다른 컴포넌트의 생명주기를 인식해서 active 상태(STARTED, RESUMED)일 때만 데이터를 업데이트한다. MVVM 패턴에서 View가 ViewModel을 관찰할 때 그 관찰 대상이 되는 데이터 홀더 클래스이다.


🔍 Observer Pattern

라이브 데이터는 데이터의 변경을 어떻게 관찰하고 알리는 것일까? 라이브 데이터와 같이 객체의 상태 변화를 관찰하는 관찰자(observer)를 객체에 등록해 상태 변화가 있을 때마다 메서드 등을 통해 객체가 관찰자(observer)에게 알리도록 하는 패턴을 옵저버 패턴(Observer Pattern)이라고 한다. 라이브 데이터의 동작방식을 더 쉽게 이해하기 위해 옵저버 패턴에 대해 간단하게 알아보자.

옵저버 패턴의 핵심은 관찰자(observer)를 관찰 대상이 되는 객체(listener)에 등록시키는 것이다. 관찰자(observer)는 객체(listener)가 발생시키는 이벤트를 받아서 처리한다. 아래 다이어그램에서는 listener가 Subject로 표시되어 있다.

이미지 출처: 위키백과

객체(Subject)에서 이벤트가 발생하면 관찰자(Observer)는 콜백을 받고, notify 함수를 통해 필요한 동작을 수행한다. 위 다이어그램에서 각각의 관찰자 ConcreteObserverA와 ConcreteObserverB는 notify 함수를 구현해 동작을 정의해야 한다.

 

🔨 라이브 데이터 사용하기

라이브 데이터 객체를 사용하는 방법은 다음과 같다.

1) 특정 유형의 LiveData 인스턴스를 생성한다.

이 작업은 일반적으로 ViewModel 클래스 내에서 이루어진다.

2) onChanged() 메서드를 정의하는 Observer 객체를 만든다.

이 메서드는 LiveData 객체가 가진 데이터가 변경될 때 발생하는 이벤트를 제어한다. 일반적으로 activity나 fragment와 같은 UI 컨트롤러에 Observer 객체를 생성한다.

3) observe() 메서드를 사용해 LiveData 객체에 Observer 객체를 연결한다.

observe() 메서드는 LifecycleOwner 객체를 사용한다. 이렇게 하면 Observer 객체가 LiveData 객체를 관찰해 변경사항에 대한 알림을 받는다. 일반적으로 activity나 fragment와 같은 UI 컨트롤러에 Observer 객체를 연결한다.

LiveData 객체에 저장된 값을 업데이트하면 연결된 LifecycleOwner가 active 상태에 있는 한 등록된 모든 관찰자가 트리거되며, UI가 자동으로 업데이트된다.

 

👍 라이브 데이터의 장점

  • 라이브 데이터를 사용하면 UI와 데이터 상태의 일치를 보장한다.
  • observer는 lifecycle 객체에 결합되어 있어 연결된 생명 주기가 끝나면 자동으로 삭제되기 때문에 메모리 누수가 없다.
  • 액티비티가 백 스택에 있을 때를 비롯해 observer의 생명 주기가 비활성 상태에 있으면 observer는 어떤 라이브 데이터 이벤트도 받지 않기 때문에 중지된 액티비티로 인한 비정상 종료가 발생하지 않는다.


라이브 데이터를 사용하지 않았을 때는 데이터가 변경된 경우 recyclerview에 알림을 주는 식으로 UI를 업데이트 했는데 라이브 데이터를 사용하면 데이터가 변경되면 자동으로 UI를 업데이트 해주기 때문에 편리하다.

참고

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함