본문 바로가기
📱 Android

[Android] Pattern (MVC, MVP, MVVM)

by 콩드로이드 2022. 5. 30.

MVC

 

   Model, View, Controller로 구성

 

🔍 Model

- 비즈니스 로직 및 데이터를 다루는 영역

ex) POJO 클래스, SQLite, Room, Realm

 

🔍 View

- 사용자에게 보이는 영역

- Model로 부터 얻은 데이터 표시

ex) Activity, Fragment

 

🔍 Controller

- 모델과 뷰에 의존

- 뷰로 부터 입력 받음
- 특정 이벤트 발생 시 뷰, 데이터 변경 가능

ex) Activity, Fragment

 

다이어그램

 

💬 MVC의 장점과 단점은 무엇일까?

장점

- 직관적이다 
  쉽게 말해 패턴을 몰라도 구조가 단순하고 직관적이라 쉽게 적용할 수 있다

단점

- 컨트롤러가 뷰, 모델에 의존적 -> 유닛테스트가 힘들다

- Fragment, Activity에서 Controller, View를 겸해서 사용 -> 스파게티 코드 -> 유지보수 힘들다

 


MVP

Model, View, Presenter로 구성

 

MVC에서는 Activity, Fragment에서 UI, Controller를 겸하고 있었기 때문에 이를 분리합니다

Model과 View는 MVC와 동일하지만 Presenter가 새로운 역할로 등장합니다

 

Presenter

1) 사용자의 이벤트를 전달
2) 화면 갱신


즉, View, Model의 인스턴스를 가지고 이 둘을 연결한다

 

💬 MVP의 장점과 단점을 무엇일까?

장점

- Presenter : View = 1 : 1 관계

- 위에 말했던 것 처럼 Presenter와 View가 연결되면서 View, Model의 의존성이 사라진다

- UI, 비즈니스 로직을 분리 -> 유닛 테스트 용이

단점

- Presenter : View = 1:1 관계이기 때문에 (Presenter 재사용 불가능), View가 늘어날수록 Presenter 생성됨

 


MVVM

Model, View, ViewModel로 구성

 

MVP는 UI와 비즈니스 로직이 분리되어 있지만, View와 Presenter가 강한 의존도를 가진다는 문제점이 있습니다

MVVM에서는 Data Binding, LiveData, RxJava와 같은 Observable을 사용해서 View와 Presenter의 강한 의존도를 끊는것을 목표로 합니다

 

MVVM에서는 Presenter 대신 ViewModel을 사용합니다

 

 

ViewModel

- View에 표현할 데이터를 Observable 타입으로 관리합니다

- View들이 ViewModel에 데이터를 구독 요청하여 화면에 표시 -> ViewModel : View = 1 : N 의 관계

- Observable 타입의 데이터들이 View에 변경사항을 통지하기에, View에 대한 의존성을 갖지 않아야한다.

   즉, MVVM에서는 ViewModel이 필수적으로 사용됩니다

 


궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊