Android/Architecture

Android MVVM 아키텍처 구성과 의의를 View Model을 중심으로 알아보자.

Dev.Cho 2021. 3. 24. 19:16

목적

  • MVVM 아키텍처의 각 부분이 어떤 역할을 하는지 안다.
  • MVVM 아키텍처의 의의를 이해한다.

MVVM 아키텍처 개요

MVVM 아키텍처는 View, View Model, Model 세가지로 나뉜다.

 

그림1. MVVM구조 [출처:Android Developers]

 

1. View :  UI 클래스 - Activity와 Fragment

 View는 말 그대로 보이는 것이다. View의 가장 대표적 class인 Activity는 UI를 포함한 화면 하나를 가지고 있다. Activity나 Fragment와 같은 요소에서는 사용자에게 UI를 보여주며, 사용자와 소통하는 채널이 된다.

 View에서는 아래 ViewModel의 데이터를 관찰(Observe)하여 데이터 변경이 있을 시, View를 업데이트 시킨다. 보통 View를 업데이트 시킬 때 Data Binding Library를 이용한다. 

 <그림1>에서는 Activity/Fragment 단에 해당한다.

 

2. View Model : Model 클래스와 데이터를 주고 받고, UI 클래스에 데이터를 발행하는 클래스

 View Model은 View에 발행할 데이터를 저장하고, Model과 커뮤니케이션 하기 위한 데이터 처리 로직을 포함한다. 즉, 비즈니스 로직은 이곳에 모두 작성된다.

 이때 데이터는 LiveData로 받아오는 것을 추천한다. LiveData란 수명 주기를 인식하는 데이터로, LiveData를 이용하면 Activity의 수명 주기 만큼만 데이터를 받아올 수 있어 리소스 낭비를 방지해주고, Observer를 붙여 놓을 수 있어, 데이터가 변경될 때 어떤 UI 컴포넌트에 데이터 변경을 알려야 할지를 알려줄 수 있다. 

 <그림1>에서는 ViewModel 단에 해당한다.

 

3. Model : 데이터를 처리하는 클래스

 Model은 데이터를 처리하는 클래스이다.

 위 그림1의 구조에서는 Repository, Model, Remote Data Source 단에 해당한다.

 Model 단에 Room이란 라이브러리는 안드로이드 RDB인 SQLite를 쓰기 편하게 만든 라이브러리이며, 안드로이드 디벨로퍼스에서는 SQLite를 직접 조작하기 보다는 ORM 라이브러리인 Room 라이브러리를 이용해 데이터를 조작하는 것을 추천한다. Remote Data Source의 Retrofit 라이브러리는 외부 API를 이용하기 위한 REST 웹서비스를 위한 HTTP 통신 라이브러리 이다. 보통 Retrofit과 OkHttp 두개를 섞어서 쓴다.

 

MVVM 아키텍처의 의의

  •  View, View Model, Model 각 부분을 독립적으로 모듈화하여 개발할 수 있다. 
  •  테스트 가능한 코드를 짤 수 있어 유지 보수가 용이하다.
  •  ViewModel을 이용해 View의 상태 데이터 저장이 용이하다.

 

 즉, 각 부분(View, View Model, Model)이 각자의 역할을 수행할 때, 리소스 제한으로 인해 제한 사항이 많은 안드로이드 OS를 위한 최적의 구조가 만들어진다.

 

반응형