log.Sehee
디자인 패턴 / MVC, MVP, MVVM 본문
디자인 패턴
컴퓨터 공학에서 디자인 패턴이란 무엇인지 알아보자
: 프로그램을 설계할 때 자주 발생했던 문제점들을 피하기 위해 하나의 규약 형태로 만들어 놓은 설계 패턴
각각의 역할을 지정해 책임을 분리하며 결합도를 낮추고 확장, 테스트, 유지 보수에 용이하다.
디자인 패턴의 이점
: 재사용성, 유지보수성, 확장성, 협업에 용이
[디자인패턴] MVC, MVP, MVVM 비교
MVC (Model, View, Controller)
: Controller가 여러 개의 View를 선택할 수 있는 1:N 구조, 가장 단순하며 보편적이다.
View와 Model 사이의 의존성이 높다. 어플리케이션이 커질수록 유지보수가 어려워진다.
Model
: View에 표시되기 위해 필요한 데이터이며 비즈니스 로직을 설명하는 클래스의 집합이다.
데이터가 어떻게 변경되고 조작될 수 있는지에 관한 규칙을 정의한다.
View
: UI 구성요소를 나타내며 Controller로부터 받은 UI 데이터를 표시하는 역할이다.
데이터의 상태 변화 업데이트를 위해 옵저버 패턴을 이용하여 Model을 관찰한다.
Controller
: 클라이언트의 요청을 처리하며 View와 Model 사이를 중재한다.
Model을 통해 받은 데이터를 처리, 결과값을 View에 반환한다.
동작 순서
- 사용자의 Action이 Controller에 들어온다.
- Controller가 Action을 확인, Model을 업데이트한다.
- Controller는 Model을 표시할 View를 선택한다.
- View가 Model을 사용하여 화면을 나타낸다.
MVP (Model, View, Presenter)
: MVC에서 파생되어 Controller의 역할을 Presenter가 수행한다.
View와 Model 사이의 의존성이 없지만 View와 Presenter사이의 의존성이 높고 어플리케이션이 커질수록 의존성이 커진다.
Presenter
: View를 통해 사용자의 입력을 받는다.
Model을 조작하고 View를 업데이트하며 Present는 View와 Interface를 통해 통신한다.
Interface는 Presenter 클래스에서 정의되며 구성요소(Activity, Fragment)는 Interface를 구현, 데이터를 랜더링한다.
동작 순서
- 사용자의 Action이 View를 통해 들어온다.
- View가 데이터를 Presenter에 요청한다.
- Presenter는 Model에게 데이터를 요청한다.
- Model은 Presenter에게 데이터를 응답한다.
- Presenter가 데이터를 가공, View에게 응답한다.
- View는 Presenter로부터 데이터를 응답받고 UI 데이터를 갱신한다.
MVVM (Model, View, View Model)
: 양방향 데이터 바인딩을 지원한다. View Model의 데이터 변화를 View에 보낸다.
옵저버 패턴을 활용, View Model의 변경사항을 Model에게 알린다.
테스트 및 확장 용이성이 증가한다.
View Model
: View의 상태 유지 및 변화, View에 대한 작업의 결과로 Model을 조작한다.
Command 패턴과 Data Binding을 통해 View와 View Model 사이의 의존성을 없앴다.
다수의 View는 하나의 ViewModel에 매핑될 수 있어 View Model은 다수의 View에 대해 완전히 독립적이다.
+
Command 패턴 : View에서 UI를 처리하기 위해 View Model에 전달하는 요구사항을 캡슐화한 것
Data Binding : View와 View Model 사이의 데이터를 동기화시키는 것
동작 순서
- 사용자의 Action이 View를 통해 들어온다.
- View가 View Model에 Action을 전달한다.
- View Model이 Model에게 데이터를 요청한다.
- Model은 ViewModel에게 요청받은 데이터를 응답한다.
- View Model은 응답받은 데이터를 가공하여 저장한다.
- View는 Data Binding을 이용해 UI를 갱신한다.
MVC와 MVVM의 차이점
MVC (Model, View, Controller) | MVVM (Model, View, View Model) |
애플리케이션의 진입점 : Controller | 애플리케이션의 진입점 : View |
View에 Controller에 대한 참조 X | View에 View Model에 대한 참조 O |
Controller : View / 1:N | View : View Model / 1:N |
모델을 사용자와 별도로 테스트 가능 | 별도의 단위테스트가 용이, 코드가 이벤트 기반 |