본문 바로가기

Android/Architecutre

MVVM 시작하기(1) ― LiveData, Room을 MVVM패턴으로 사용해보자

728x90
반응형

 

MVVM(Model-View-ViewModel)


 

 

MVVM 패턴은 ViewModel을 사용하여 Model과 View를 분리하는것이 특징이죠.

View는 xml layout 뿐 아니라 Activity, Fragment등이 되고, Model은 내부/외부 데이터가 됩니다.

Repository로 Room이나 다른 웹서비스등 리모트 데이터 소스에 접근하고, ViewModel에 callback해주면, ViewModel이 observer에 response해줍니다.(View가 관찰하고 있음.)

이로써 코드 분리/역할 분리가 되어 서로 종속성 제거도하고, 데이터와 뷰가 불일치 할  확률이 줄어들게 됩니다.

 

MVVM 패턴을 시작해보기 위해, LiveData와 Room을 사용해 보겠습니다.

(또는, LiveData와 Room을 MVVM패턴으로 구현해보겠습니다!)

MVVM패턴 시작에 LiveData와 Room인 이유는 밑에서 설명하겠습니다.

 

LiveData


 

LiveData는 관찰자의 생명주기를 알고 있는 간단한 observable입니다.

LiveData는 관찰자(Observer) 패턴을 구현함으로써 View 컨트롤러(액티비티, 프래그먼트 등)와 UI 데이터의 소스(보통은 ViewModel) 사이의 통신을 허용하도록 설계되었습니다.

LiveData로 이 통신이 더 안전해지고, 수명 주기를 알고 있으므로 데이터가 활성화될 경우 View만 데이터를 수신하게 됩니다.


요컨대, View와 ViewModel 사이에서 구독을 수동으로 취소할 필요가 없다는 점, 모든 것이 함께 연결되어 있으므로 데이터 변경 시 UI가 자동으로 업데이트 되는 것이 이 패러다임의 장점입니다.

또다른 유명한 반응형 구조인 RxJava를 쓰면 Dispoable등을 통해 메모리 관리를 해주어야 하지만 LiveData는 그런 부분은 신경 쓸 필요가 없습니다. 

또한, 화면 회전등 수명주기기가 비활성화 되었다가 활성화 되었을 때 옵저버가 기존데이터를 불러와 최신 데이터를 유지해줍니다.(와우!)


단점은 LiveData에는 Rx처럼 데이터 스트림을 결합하거나 스레드를 관리하기 위한 도구 키트가 함께 제공되지 않는다는 점입니다.

이처럼 observable 한 LiveData는 View 컨트롤러와 ViewModel 사이에서 매우 효과적으로 작동하며, 이를 사용하여 앱의 다른 컴포넌트를 관찰하고 생명주기를 관리할 때 사용할 수 있습니다.

다른 컴포넌트의 예중 하나가 기본적으로 LiveData를 지원하는 Room입니다.

LiveData를 통해 Room의 쿼리를 관찰할 수 있습니다.

Room을 사용해 로컬 데이터베이스와 리사이클러뷰를 구현한 예제는 밑에서 볼 수 있습니다.

[Android/Function] - [Java/Kotlin] Dynamic Recycler View 구현 & Local Database에 데이터 저장(Room) & LiveData 사용하기.

이제, SQLite의 Room과 LiveData를 MVVM 패턴으로 사용해볼건데요.

예제는 Room을 통해 저장한 데이터를 Recycler View를 통해 보여주도록 하겠습니다.

코드는 순서대로 진행됩니다.

[Android/이론] - MVVM 시작하기(2) ― Room Entity, Dao, Database 만들기

[Android/이론] - MVVM 시작하기(3) ― ViewModel, 데이터 바인딩(Data Binding)

[Android/이론] - MVVM 시작하기(4) ― Repository, Model-View 연동

 

참고문서

728x90
반응형