티스토리 뷰

728x90



이번 포스팅에서는 Room 에 LiveData 를 적용할 것이다.

기존 project 에 LiveData 를 적용하면 어떤 장점이 있는지 확인해보자.

 

참고로, 지난 포스팅 내용은 하단과 같다.

- UI, DB 생성, CRUD, column 추가, DB 확인

[Android/Database] - SQLite 에서 ROOM 까지 (2) - UI 구성

[Android/Database] - SQLite 에서 ROOM 까지 (3) - SQLiteOpenHelper

[Android/Database] - SQLite 에서 ROOM 까지 (4) - SQLite 를 이용한 CRUD

[Android/Database] - SQLite 에서 ROOM 까지 (5) - SQLite 로 생성된 기존 DB 에 column 추가하기

[Android/Database] - SQLite 에서 ROOM 까지 (6) - DB 확인하기

- ROOM, ROOM 의 3구성요소 추가, Repository, ViewModel 추가, migation 설정, CRUD

[Android/Database] - SQLite 에서 ROOM 까지 (7) - ROOM 이란?

[Android/Database] - SQLite 에서 ROOM 까지 (8) - ROOM 의 3 구성요소(Database, Entity, Dao) 추가하기

[Android/Database] - SQLite 에서 ROOM 까지 (9) - Architecture Components 구성을 위한 Repository, ViewModel 추가하기

[Android/Database] - SQLite 에서 ROOM 까지 (10) - SQLite 에서 ROOM 으로 migration 설정하기

[Android/Database] - SQLite 에서 ROOM 까지 (11) - ROOM 을 이용한 CRUD



LiveData

LiveData 는 데이터를 저장하고 변화를 관찰 할 수 있는 Observable data holder 클래스다.

일반적인 Observable 과는 다르게 LiveData 는 안드로이드 생명주기(LifeCycle) 를 알고 있다.

즉, 안드로이드 컴포넌트 (액티비티나, 프레그먼트, 서비스 등)의 생명주기(Lifecycle)를 알고있어 LiveData 가 활성상태(start, resume) 일때만 데이터를 업데이트(Update) 한다.

LiveData 는 Observer 패턴을 따른다.

LiveData 가 가지고 있는 데이터에 어떠한 변화가 일어날 경우, LiveData 는 등록된 Observer 객체에 변화를 알려주고, Observer 의 onChanged() 메소드를 실행한다.

UI 객체는 LiveData 에 옵저버를 등록할 수 있으며 데이터가 변경될 때 UI 를 변경할 수 있다.

 



LiveData 의 이점

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

LiveData 는 생명주기에 따라 데이터가 변경되면 Observer 객체에 변경을 알린다.

앱 데이터가 변경될 때마다 UI 를 업데이트하는 대신, 변경이 발생할 때마다 Observer 가 UI 를 업데이트할 수 있다.

 

◼ 메모리 누수(Memory leak) 없음

Observer 는 Lifecycle 객체에 결합되어 있어 연결된 생명 주기가 끝나면 자동으로 메모리를 해제한다.

 

◼ 중지된 활동으로 인한 비정상 종료 없음

Observer 의 생명 주기가 비활성 상태(예: 활동이 백 스택에 있음) 이면 Observer 는 어떤 LiveData 이벤트도 수신하지 않는다.

 

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

UI 구성요소는 관련 데이터를 관찰하기만 할 뿐 관찰을 중지하거나 다시 시작하지 않는다.

LiveData 는 관찰하는 동안 관련 생명 주기 상태의 변경을 인식하므로 이 모든 것을 자동으로 관리한다.

 

◼ 최신 데이터 유지

생명 주기가 비활성화되면 다시 활성화될 때 최신 데이터를 수신한다.

예를 들어 백그라운드에 있었던 활동은 포그라운드로 돌아온 직후 최신 데이터를 받는다.

 

◼ 적절한 구성 변경

구성 변경(예: 기기 회전)으로 인해 활동이나 프래그먼트가 다시 생성되면 사용할 수 있는 최신 정보를 즉시 수신한다.

 

◼ 리소스 공유

LiveData 를 상속하여 LiveData 클래스를 구현할 수 있고 싱글톤 패턴을 이용하여 시스템 서비스를 래핑하여 앱 어디에서나 자원을 공유 할 수 있다.



Before & After

기존 프로젝트에서 LiveData 를 적용하면 어떻게 바뀌는지 알아보자.

 

◼ Dependencies

기존 프로젝트에는 ViewModel 때문에 이미 추가했지만 LiveData 를 사용하려면 하단과 같이 dependency를 추가해야 한다.

 

◼ List -> LiveData

- Before : List<phstudententity>

 

- After : LiveData<List<phstudententity>>

 

◼ Update

- Before : Interface 를 사용해 DB query 후 UI 업데이트

 

-After : LiveData 사용시 observer 를 통해 전달되면 UI 업데이트

 

◼ Insert

- Before : 삽입 후 UI update 호출해야함

 

- After : 삽입이 완료되면 알아서(Observer 가 onChanged 를 호출함) UI update 됨.



Source code

◼ Before

https://github.com/parkho79/FromSQLiteToRoom_3

 

◼ After

https://github.com/parkho79/FromSQLiteToRoom_4



728x90
댓글