티스토리 뷰

Android 개발/Architecture

[Architecture] MVVM

DevReview 2021. 1. 4. 21:50
반응형

MVVM 아키텍처의 필요성

 보통의 앱이라 하면 프로그램 런처의 단일 진입점이 있고, 해당 진입점(디렉터리)만을 사용하여 애플리케이션이 구축된다. 대표적인 예로는 자바 WAR 파일 Rails 또는 NodeJS 코드의 단일 디렉토리 구조가 있다. 하지만 안드로이드 앱은 4대 컴포넌트라 불리는 Activity, Service, Content Provider, Broadcast Receiver을 비롯하여 Fragment 등의 구성요소가 있으며, 각 구성요소의 진입지점으로 앱으로 진입이 가능하다. 예를 들어 Activity 시작으로 앱에 진입할 수 있고, Broadcast Receiver에서 Broadcast Intent를 호출받아 앱으로 진입이 가능하다(푸시 알림 등). 

 또한 구성요소가 계속해서 살아있는 웹앱과는 다르게, 모바일에서 사용할 수 있는 리소스의 한계로 인해 운영체제가 언제든지 앱 구성요소를 제거할 수 있으며, 사용자도 이러한 작업이 가능하다. 즉, 모바일의 리소스 한계로 인해 이러한 복잡한 구조가 만들어진 것이며, 앱 구성요소는 언제든지 제거될 수 있으므로 앱 구성요소에 앱 데이터나 상태를 저장하는 것을 피해야 한다. 

 이를 위해 앱에서는 기존의 MVC 아키텍처에서 탈피하여 MVP가 만들어졌지만, View와 Model 사이의 의존성이 있어서, 각 부분의 모듈화 하여 개발하기 어렵다는 점이 있었다. 이를 해결하기 위해 View와 Model 사이의 의존성을 제거한 MVVM 아키텍처가 만들어졌으며, 이를 통해 각 부분은 독립적이 되어 모듈화하여 개발할 수 있게 되었다.

 

MVVM 아키텍처 개요

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

 

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

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

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

 <그림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에 직접 접속하기 보다는 Room 라이브러리를 이용해 데이터를 조작하는 것을 추천한다. Remote Data Source의 Retrofit 라이브러리는 외부 API를 이용하기 위한 http 통신 라이브러리 이다. 당연한 이야기지만, POST로 데이터를 조작할 수 있고 GET으로 데이터를 가져올 수 있다.

 

MVVM 아키텍처의 의의

 1. MVVM 아키텍처를 이용한다면 View, View Model, Model 각 부분을 독립적으로 모듈화하여 개발할 수 있다. 

 2. 앱의 프로세스가 OS에 의해 죽을 때 때 데이터가 보존 될 수 있어, 수명주기에 맞추어 데이터 업데이트가 가능해진다. 

 

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

 

 


출처

1. 앱 아키텍처 가이드 - developer.android.com/jetpack/guide?hl=ko

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함