티스토리 뷰
안드로이드 앱 개발을 공부하면서 자주 접하게 되는 아키텍처 패턴인 MVC, MVP, MVVM 패턴에 대해 알아보자. (아키텍처 패턴의 개념을 잘 모른다면 [Android] 디자인 패턴, 아키텍처 패턴 이 글 참고)
1. MVC
MVC 패턴은 Model, View, Controller로 구성되어 있다.
- Model(모델): 어플리케이션의 데이터를 저장하는 역할을 담당한다. SQLite, File, content provider가 이 영역에 속한다.
- View(뷰): 화면 구성을 담당하는 영역이다. 이 영역은 View 클래스를 상속하는 클래스를 사용해서 구성할 수 있다.
- Controller(컨트롤러): View와 Model을 서로 연결하고 제어하는 영역이다. 이 영역에는 activity, service, broadcast receiver, fragment가 포함된다.
안드로이드 애플리케이션은 기본적으로 우리에게 친숙한 MVC 모델로 구성되어 있으며, activity나 fragment 같은 view들이 View와 Controller의 역할을 모두 한다.
👍장점: 구현하기 쉽다.
👎단점: 하나의 클래스에 코드양이 증가하고, View와 Model 간의 의존성이 높아져서 기능 추가 및 유지보수가 어렵다.
간단한 프로젝트를 진행하는 경우에는 적합하지만, 프로젝트가 커지고 메소드 개수가 많아지면 코드 파악이 어려워기 때문에 메소드와 클래스를 적절히 분리하면서 복잡도를 관리해야 한다.
2. MVP
MVP 패턴은 안드로이드에서 가장 많이 사용하는 것으로 알려진 패턴으로, Model, View, Presenter로 구성되어 있다.
- Model(모델): 데이터와 관련된 처리를 담당한다. MVC의 Model과 동일하다.
- View(뷰): 이벤트가 발생하면 Presenter로 알린 후 반환받은 것에 따라 UI를 갱신한다.
- Presenter(프레젠터): View에서 전달받은 이벤트를 처리하여 다시 View로 반환한다. Model에 데이터 요청이 필요한 이벤트가 들어오는 경우 Model에 요청한 후 받은 데이터를 View에 전달한다.
👍장점: View와 Model 사이의 의존성을 낮출 수 있다.
👎단점: View와 Presenter 사이의 의존성이 높아진다. (View와 Presenter는 1:1로 매칭된다.)
3. MVVM
MVVM 패턴은 Model, View, ViewModel로 구성되어 있다.
- Model(모델): 데이터와 관련된 처리를 담당한다. 데이터가 변경되면 ViewModel을 거쳐서 View로 전달된다. 안드로이드에서는 LiveData나 RxJava 등을 통해 구현할 수 있다.
- View(뷰): 화면에 표현되는 레이아웃을 관리한다. View는 Model은 알지 못하기 때문에 ViewModel을 옵저빙하고 있다가 상태 변화가 전달되면 화면을 갱신해야 한다.
- ViewModel(뷰모델): View에 연결할 데이터와 명령으로 구성되어 있으며 변경 알림을 통해 View에게 상태 변화를 전달한다. ViewModel은 Model은 알지만 View는 알지 못한다.
👍장점: UI 컨트롤러의 책임을 분담하여 클래스가 거대해지는 것을 방지하고 유지 보수, 재사용성, 테스트 등을 용이하게 만들어준다.
👎단점: ViewModel의 설계가 어렵다. DataBinding 등 추가적인 공부가 필요하다.
MVVM 모델을 구현하는 경우 데이터 바인딩을 함께 써야 의존성을 낮출 수 있다. 구글이 제공하는 AAC(Android Architecture Component)를 사용해 MVVM 패턴을 쉽게 구성할 수 있다.
참고
'Develop > Android' 카테고리의 다른 글
[Android] LiveData(라이브 데이터) (0) | 2021.09.11 |
---|---|
[Android][Error] resource android:attr/lStar not found 해결방법 (1) | 2021.09.08 |
[Android] 디자인 패턴, 아키텍처 패턴 (0) | 2021.09.03 |
[Android] DI(Dependency Injection)란? (0) | 2021.08.31 |
[Android] No static method metafactory 오류 해결방법 (0) | 2021.08.24 |
- Total
- Today
- Yesterday
- 백준
- 힙
- 아키텍처 패턴
- heap
- Android
- livedata
- 자바
- 안드로이드
- androidx.core
- SCPC2021
- Naver AI Burning Day
- 변수
- 라이브 데이터
- java
- 우선순위큐
- 뷰모델
- 후기
- Kotlin
- 코틀린
- error
- gradle
- programmers
- viewmodel
- 알고리즘
- architectural pattern
- 프로그래머스
- hilt
- BAEKJOON ONLINE JUDGE
- MutableLiveData
- Algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |