
이전에 다뤘던 안드로이드 아키텍처 가이드의 곳곳에 등장했던 안드로이드 아키텍처 컴포넌트(Android Architecture Component)를 사용하면 자연스럽게 MVVM 아키텍처를 사용하게 된다고 한다. 이번 포스팅에서는 MVVM 아키텍처가 어떤 것인지와 AAC가 무엇이고 어떻게 사용되는지 알아본다.
[Android/Jetpack] 앱 아키텍처 가이드(App Architecture Guide)
App Architecture Guide 안드로이드 공식문서의 Guide to app architecture를 바탕으로 작성된 포스팅입니다. 앱 아키텍처 가이드 | Android 개발자 | Android Developers 이 가이드에는 고품질의 강력한 앱..
junyoung-developer.tistory.com
MVVM 아키텍처

- Model : MVC의 Model과 동일한 역할
- DataModel이라고도 하며, 다양한 데이터 소스로부터 필요한 데이터를 준비함
- ViewModel에서 데이터를 가져갈 수 있게 데이터를 준비하고 그에 대한 이벤트를 보냄
- View : 레이아웃을 정의함
- 기본적으로 데이터를 보여주기만 하기 때문에 비즈니스 로직을 포함하지 않지만 UI 변경과 관련된 일부 로직은 포함될 수 있음 (Android는 생명주기라는 플로우를 가지고 있기 때문에 이것을 처리하는 것만으로도 복잡해짐)
- ViewModel을 관찰하고 있다가 상태 변화가 전달되면 화면을 갱신해야 함
- ViewModel : View와 Model 사이의 매개체 역할
- View와 관련된 비즈니스 로직이 들어가며 데이터를 가공해서 View에 뿌리기 쉬운 Model로 바꾸는 역할
- MVP와 달리 View와 ViewModel이 1:n의 관계를 가질 수 있음(Presenter와 달리 View에 대한 참조가 없음)
- View가 데이터 바인딩(Data Binding) 할 수 있는 속성과 명령으로 구성되어 있음
다시 정리해 보자면👆
사용자 입력은 View로 전달되며, View는 ViewModel이 제공하는 데이터를 관찰하여 UI를 업데이트 한다.
→ View는 자신이 이용할 ViewModel을 선택하여 데이터를 바인딩(binding)하여 업데이트 받게 되는 것
Model의 상태나 데이터가 변경되면 해당하는 ViewModel을 이용하는 View가 자동으로 업데이트 된다.
→ ViewModel은 View를 나타내기 위한 Model이며, View의 Presentation Logic을 처리하는 것
[ 장점 ]
- View가 데이터를 실시간으로 관찰할 수 있음
- LiveData(Observable 패턴)을 사용하기 때문에 데이터베이스를 관찰하고 자동으로 UI를 갱신함
- 직접 View를 바꾸는 번거로움이 없고 데이터와 불일치할 확률이 줄어듦
- 생명주기로부터 안전하며 메모리 누수를 방지함
- ViewModel을 통해 데이터를 참조하기 때문에 Activity나 Fragment의 생명주기를 따르지 않음
- 화면 전환과 같이 Activity가 내려갔다가 다시 재구성되어도 ViewModel이 데이터를 유지하고 있기 때문에 영향받지 않음
- View가 활성화되어 있을 경우에만 작동하기 때문에 불필요한 메모리 사용을 줄일 수 있음
- 역할을 분리함으로써 모듈화함
- UI, 비즈니스 로직, DB가 기능별로 모듈화됨
- 유닛테스트가 용이해짐
[ 단점 ]
기존에 비해 추가로 만들어주어야 하는 클래스가 많고, 이 클래스들을 코딩으로 연결해주어야 함
단순 UI 작업에서는 MVVM을 구현하는 부담이 지나치게 과해질 수 있음
아주 큰 응용 프로그램에서 데이터 바인딩을 사용한다면 눈에 띄게 메모리를 소모하게 됨
Android Architecture Component; AAC
AAC는 테스트와 유지보수가 쉬운 앱을 디자인할 수 있도록 돕는 라이브러리
안드로이드는 Activity, BroadcastReceiver, Service 등 여러 컴포넌트들이 있고, 생명주기가 다르게 얽혀있다. 앱을 잘 만들기 위해서 이러한 컴포넌트들을 부드럽게 연결해야 하는데, 생명주기를 학습하고 엉키지 않게 고민하는 것은 개발자의 몫! 😭😭
구글이 SDK에서 제공하는 컴포넌트들에 대해 개발자들에게 더 가이드를 주기를 원했고, 결과적으로 AAC를 만들게 된 것이다!
이전 포스팅에서 다뤘던 안드로이드 아키텍처 가이드에서도 말하듯이 보일러 플레이트한 코드로 시간낭비하지 말고 AAC를 사용하라!

- Lifecycles (Easy handling lifecycles) ✅
- LiveData (Lifecycle aware observable) ✅
- ViewModel (Managing data in lifecycle) ✅
- Room (Object Mapping for SQLite) ✅
- Paging (Gradually loading information)
MVVM 아키텍처에 대해 알아보면서 이전 안드로이드 아키텍처 가이드에서 다뤘던 내용을 좀 더 이해할 수 있게 되었다. 그래도 아직은 이론만 다뤘기 때문에 실제로 어떻게 적용해야 할지 잘 모르겠다. 계속해서 AAC 라이브러리 하나하나 자세히 공부하면서 MVVM을 실습할 수 있는 작은 토이 프로젝트를 진행할 계획이다.
reference >
- https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EB%B7%B0%EB%AA%A8%EB%8D%B8
- https://kotlinworld.com/m/42
- https://blog.yena.io/studynote/2019/03/16/Android-MVVM-AAC-1.html
- https://velog.io/@jojo_devstory/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%ED%8C%A8%ED%84%B4-MVVM%EC%9D%B4-%EB%AD%98%EA%B9%8C
- https://medium.com/@maryangmin/android-architecture-components-%EC%86%8C%EA%B0%9C-1-8e04491be1f6
'ANDROID > Android Jetpack' 카테고리의 다른 글
[Android/Jetpack] AAC - Data Binding (0) | 2021.08.11 |
---|---|
[Android/Jetpack] AAC - Room (0) | 2021.08.03 |
[Android/Jetpack] AAC - ViewModel (0) | 2021.07.27 |
[Android/Jetpack] AAC - LiveData (0) | 2021.07.21 |
[Android/Jetpack] AAC - Lifecycles (0) | 2021.07.20 |
[Android] MVC, MVP 아키텍처 (0) | 2021.07.12 |
[Android/Jetpack] 앱 아키텍처 가이드(App Architecture Guide) (0) | 2021.07.09 |
[Android/Jetpack] Jetpack이란? (0) | 2021.07.09 |
댓글