SW 공부노트
[안드로이드/아키텍처] MVC, MVP, MVVM 본문
MVC 패턴
Model + View + Controller로 이루어져 있다.
널리 사용되고 있는 패턴인 만큼 가장 단순하고, 보편적으로 많이 사용된다.
- Model: 데이터와 데이터를 처리하는 부분
- View: UI(Activity, Fragment)
- Controller: 사용자의 입력(Action)을 받고 처리하는 부분
동작 과정
MVC는 위 그림과 같이 표현할 수 있으며 동작 순서는 다음과 같다.
- Controller에서 사용자 입력(Action)을 받는다.
- Controller에서 받은 Action을 확인해 Model을 업데이트한다.
- Controller에서 해당 Data를 보여줄 View를 선택한다.
- View는 Model을 사용해 화면에 보여준다.
3단계에서 Controller는 View를 선택만 하고 업데이트하진 않기 때문에 View는 Model을 통해 업데이트 된다.
* View는 Controller를 알지 못한다.
- View가 Model을 이용해 직접 업데이트
- Model에서 View에게 Notify하여 업데이트
- View가 Polling으로 주기적으로 Model의 변경을 감지하여 업데이트
특징
- Controller와 View는 1:N의 관계로, Controller가 여러 개의 View를 선택해 Model을 나타낼 수 있다.
- View 표시에 Model이 직접적으로 사용되므로 Model과 View의 의존성이 높다는 단점이 있다. 따라서 어플리케이션이 커질수록 복잡해지고 유지보수가 어려워진다.
안드로이드에서 MVC는 다음과 같은 예를 들 수 있다.
- View: Activity
- Controller: Button.setOnClickListener
즉, 두 작업 모두 Activity에서 처리할 수 있다는 것을 알 수 있다.
View와 Controller 모두 하나의 클래스에서 이루어지기 때문에 길이가 복잡해지고 가독성이 떨어지게 된다.
이러한 문제를 해결하기 위한 방안으로 나온 패턴이 MVP 패턴이다.
MVP 패턴
Model + View + Presenter로 이루어져 있다.
- Model(데이터) / View(UI)는 위 패턴과 동일
- Presenter: View에서 요청한 정보를 Model로 부터 가공하여 View로 전달한다. Model과 View의 다리같은 역할
동작 과정
MVP는 위 그림과 같이 표현할 수 있으며 동작 순서는 다음과 같다.
- View를 통해 사용자의 Action을 받는다.
- View는 Presenter에 데이터를 요청한다.
- Presenter는 Model에 데이터를 요청한다.
- Model은 Presenter에서 요청받은 데이터를 응답한다.
- Presenter는 View에게 데이터를 응답한다.
- View는 Presenter가 응답한 데이터를 통해 화면을 나타낸다.
쉽게 표현하면 View <-> Presenter <-> Model과 같은 형식으로 진행된다.
특징
- Presenter가 View와 Model의 인스턴스를 가지고 있어 둘을 연결한다.
- Presenter와 View는 1:1 관계로 의존성이 높다는 단점이 있다.
- MVC 패턴과 달리 Presenter를 통해 데이터를 전달받기 때문에 View와 Model간 의존성이 없다.
보통 View와 Preference에서 구현해야 할것들을 정리한 Contractor interface를 정의해 사용한다.
예제 Reference
https://medium.com/@Hanmolee/mvp-kotlin-example-2de93add4c82
MVP + Kotlin Example
MVP 패턴의 기본 구현 예제입니다.
medium.com
https://kbw1101.tistory.com/57
[Android/Kotlin] MVP 패턴을 구현해보자! (실습)
MVP를 적용할 상황을 설계 MVP를 적용할 간단한 예제를 구현하기 위해서, 다음과 같은 간단한 상황을 고려해보고자 한다. (1) 이름과 이메일을 입력하면 이 값들이 저장되는 기능 (2) 하단 Text View에
kbw1101.tistory.com
MVVM 패턴
Model + View + ViewModel로 이루어져 있다.
- Model(데이터) / View(UI)는 위 패턴과 동일
- ViewModel: View를 표현하기 위해 만든 View를 위한 Model이다. View를 나타내기 위한 Model이자 View를 위한 데이터를 처리하는 부분이다.
동작 과정
MVVM는 위 그림과 같이 표현할 수 있으며 동작 순서는 다음과 같다.
- View를 통해 사용자의 Action을 받는다.
- View에 Action이 들어오면, Command 패턴으로 ViewModel에 Action을 전달한다.
- View Model은 Model에 데이터를 요청한다.
- Model은 View Model에게 요청받은 데이터를 응답한다.
- View Model은 응답 받은 데이터를 가공하여 저장한다.
- View는 View Model과 Data Binding하여 화면을 나타낸다.
MVVM 패턴은 Command 패턴과 Data Binding 패턴을 사용해 구현된다.
- Command 패턴은 요청을 객체의 형태로 캡슐화하여 전달하는 것
- Data Binding은 데이터 원본을 결합해 동기화하는 것
즉, 사용자 입력이 들어오면 ViewModel에 Command 패턴을 통해 명령을 전달하고, 해당 요청에 따라 데이터 처리를 하면 Data Binding으로 인해 ViewModel의 값이 변경되면 View가 변경된 데이터를 반영해 View를 수정하는 것이다.
특징
- ViewModel과 View는 1:n 관계로, 둘 사이 의존성이 없다.
- 세 구성요소 사이 의존성이 없이 독립적이기 때문에 모듈화하여 개발할 수 있다.
'안드로이드 > 아키텍처 & 라이브러리' 카테고리의 다른 글
[안드로이드] Flow (0) | 2023.05.15 |
---|---|
[안드로이드] Android 앱에 Hilt 사용 (0) | 2023.04.02 |
[안드로이드] 의존성 주입(DI) (0) | 2023.04.01 |
[안드로이드] 앱 아키텍처 가이드 (0) | 2023.03.31 |
[안드로이드] Android Jetpack / AAC와 MVVM (0) | 2023.03.31 |