SW 공부노트

[안드로이드/아키텍처] MVC, MVP, MVVM 본문

안드로이드/아키텍처 & 라이브러리

[안드로이드/아키텍처] MVC, MVP, MVVM

요빈 2023. 3. 29. 19:18

MVC 패턴

Model + View + Controller로 이루어져 있다.

널리 사용되고 있는 패턴인 만큼 가장 단순하고, 보편적으로 많이 사용된다.

  • Model: 데이터와 데이터를 처리하는 부분
  • View: UI(Activity, Fragment)
  • Controller: 사용자의 입력(Action)을 받고 처리하는 부분

동작 과정

 

MVC는 위 그림과 같이 표현할 수 있으며 동작 순서는 다음과 같다.

  1. Controller에서 사용자 입력(Action)을 받는다.
  2. Controller에서 받은 Action을 확인해 Model을 업데이트한다.
  3. Controller에서 해당 Data를 보여줄 View를 선택한다.
  4. View는 Model을 사용해 화면에 보여준다.

3단계에서 Controller는 View를 선택만 하고 업데이트하진 않기 때문에 View는 Model을 통해 업데이트 된다.

* View는 Controller를 알지 못한다.

  • View가 Model을 이용해 직접 업데이트
  • Model에서 View에게 Notify하여 업데이트
  • View가 Polling으로 주기적으로 Model의 변경을 감지하여 업데이트

특징

  • Controller와 View1: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는 위 그림과 같이 표현할 수 있으며 동작 순서는 다음과 같다.

  1. View를 통해 사용자의 Action을 받는다.
  2. View는 Presenter에 데이터를 요청한다.
  3. Presenter는 Model에 데이터를 요청한다.
  4. Model은 Presenter에서 요청받은 데이터를 응답한다.
  5. Presenter는 View에게 데이터를 응답한다.
  6. 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는 위 그림과 같이 표현할 수 있으며 동작 순서는 다음과 같다.

  1. View를 통해 사용자의 Action을 받는다.
  2. View에 Action이 들어오면, Command 패턴으로 ViewModel에 Action을 전달한다.
  3. View Model은 Model에 데이터를 요청한다.
  4. Model은 View Model에게 요청받은 데이터를 응답한다.
  5. View Model은 응답 받은 데이터를 가공하여 저장한다.
  6. View는 View Model과 Data Binding하여 화면을 나타낸다.

MVVM 패턴은 Command 패턴과 Data Binding 패턴을 사용해 구현된다.

  • Command 패턴은 요청을 객체의 형태로 캡슐화하여 전달하는 것
  • Data Binding은 데이터 원본을 결합해 동기화하는 것

즉, 사용자 입력이 들어오면 ViewModel에 Command 패턴을 통해 명령을 전달하고, 해당 요청에 따라 데이터 처리를 하면 Data Binding으로 인해 ViewModel의 값이 변경되면 View가 변경된 데이터를 반영해 View를 수정하는 것이다.

 

특징

  • ViewModel과 View는 1:n 관계로, 둘 사이 의존성이 없다.
  • 세 구성요소 사이 의존성이 없이 독립적이기 때문에 모듈화하여 개발할 수 있다.