|패턴|
패턴이란 소스 코드들을 각 역할에 따라 구조화하며 나누는 것을 말한다.
안드로이드로 프로젝트를 개발할 때 다양한 패턴을 사용한다.
패턴을 사용하면 유지보수가 쉬워지며, 뷰와 모델의 의존성을 분리할 수 있다.
안드로이드에서는 주로 MVC나 MVP 패턴, MVVM 패턴을 사용한다.
|MVC 패턴|
MVC 패턴은 Model, View, Controller 패턴이다.
Model : 출력할 데이터와 행동을 갖는 객체
View : 데이터를 시각화하는 부분
Controller : 사용자 요청을 해석하여 처
중심을 담당하는 View와 Controller 모두 Activity에서 처리되기 때문에 Acitivity가 커지는 문제가 발생한다.
|MVP 패턴|
MVP 패턴은 Model, View, Presenter 패턴이다.
View와 Model이 Presenter를 통해서만 동작하며, MVC 패턴과 매우 유사하다.
MVC 패턴의 View와 Model의 결합도가 높다는 문제점을 보완하기 위해서 만들어졌지만,
Presenter가 뷰와 1:1로 동작하기 때문에 의존성이 강해지는 문제가 발생한다.
이를 통해서 Presenter의 로직이 비대하게 커지는 문제도 발생한다.
|MVVM 패턴|
앞의 두 가지 패턴의 문제점을 보완하기 위해서 사용한다.
뷰와 모델을 충분히 분리할 수 있으며, 화면 회전 등의 동작에도 데이터를 유지하는 이점이 있다.
Model, View, ViewModel로 구성된다.
위와 같은 구조를 가지는데, View에서는 ViewModel에 접근, ViewModel에서는 Model로 접근이 가능하게 한다.
현재 개발 중인 프로젝트를 살펴보면,
[View를 담당하는 MainFragment]
UI를 표시하고 사용자 이벤트를 받는 역할
[Model을 담당하는 Model]
전반적인 데이터를 처리하는 역할
[ViewModel을 담당하는 ViewModel]
UI 요소에 들어갈 데이터를 관리하는 다리 역할
3가지 구조로 나눠서 개발을 진행 중이다.
이러한 구조를 사용하면 여러 장점을 얻을 수 있다.
|MVVM 패턴의 장점|
1. View가 View Model의 데이터를 관찰하므로 간편한 UI 업데이트
2. ViewModel이 데이터를 관리하므로 Memory Leak 위험성 감소
- view가 직접 model에 접근하지 않아서 activity나 fragment의 라이프 사이클에 의존하지 않는다.
3. 기능별 모듈화가 잘 유지되어 유지 보수에 용이
- ViewModel을 재사용하거나 DB 교체 등의 작업이 편리하다.
|MVVM 패턴의 단점|
MVVM 패턴은 좋은 디자인 패턴이지만 구조가 복잡하다는 단점이 있다고 한다.
이를 위해서 AAC 등의 패턴을 사용하기도 하는데 자세한 내용은 아래 공식 문서에서 확인할 수 있다.
앱 아키텍처 가이드 | Android 개발자 | Android Developers