본문 바로가기

안드로이드

[Andorid] MVVM Pattern

패턴 도입 목적

관심사를 분리하므로서 프로그램을 더 안전하면서 확장가능하기 쉽게 만들기 위하여

 

MVC

Model: 데이터와 비즈니스 로직, 앱의 두뇌 역할, UI와 관련 안된 부분

View: 사용자에게 보여지는 UI화면

Controller: View와 Model 사이의 상호작용을 관리하는 컨트롤 타워역할 외부에서 전달받은 입력을 처리하여

  • MVC 패턴에서는 Model과 View가 완전히 분리되므로 Model은 쉽게 테스트 가능
  • Controller가 안드로이드에 종속되기 때문에 테스트가 어려워짐
  • 안드로이드 특성상 액티비티가 View표시와 Controller 역할을 같이 수행해야 하기 때문에 두 요소의 결합도가 높아짐
  • 많은 코드가 Controller로 모이게 되어 액티비티가 비대해짐

 

MVP

Presenter 는 본질적으로 Controller와 같은 역할을 합니다.

View의 참조를 직접 거치지 않고 인터페이스를 통해서 통신하므로 결합이 느슨합니다

Controller와 달리 안드로이드 의존성을 가지지 않아서 테스트에 용이합니다

Presenter는 Model과 View에 참조를 가져서 View로부터 액션을 전달받고 필요한 경우에는 Model로 부터 데이터를 취득하여 그 결과를 View에 전달합니다

View 모델 참조가 없어진 대신 Presenter에 참조가 생깁니다.

  • View와 Model 사이의 데이터 흐름이 사라지고 Presenter가 중간에서 데이트 흐름을 제어
  • 인터페이스를 추가로 구현해야 하기 때문에 구현비용이 올라가게 됨
  • View와 Presenter가 1:1로 대응해야 하기 때문에 앱이 커질수록 두 요소의 의존성이 강해지게 됨

 

MVVM

MVVM 패턴은 View와 Model 사이의 의존성이 없습니다. 또한 Command 패턴과 Data Binding을 사용하여 View와 View Model 사이의 의존성 또한 없앤 디자인패턴입니다. 각각의 부분은 독립적이기 때문에 모듈화 하여 개발할 수 있습니다.[1]

비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하게 되면, 테스트, 유지 보수, 재사용이 쉬워집니다.[2]

  • View와 Model 사이에 의존성이 없으며, ViewModel도 View에 의존성을 가지지 않음
  • 참조는 View > ViewModel > Model 순으로 단방향으로만 일어남

 

실습

MVVM 실습(Todo list 구현)  - 진행중

 

참조

[1] https://beomy.tistory.com/43

[2] https://velog.io/@k7120792/Model-View-ViewModel-Pattern