Liam 일지

MVVM 패턴이란? 본문

Android

MVVM 패턴이란?

Liam의 일지 2021. 5. 4. 12:23
728x90

MVVM패턴

MVVM패턴이란 Model, View, ViewModel의 줄임말입니다. 하나의 소프트웨어를 최대한 기능적으로 작은 단위로 나누어 테스트가 쉽고 큰 프로젝트도 상대적으로 관리하기가 좋은 구조입니다. 아래의 그림을 바탕으로 설명하면

Mvvm 구조도

모든 Input은 View로 전달되며 ViewModel은 입력에 해당하는 Presentation Logic을 처리하고 View에 데이터를 전달합니다. ViewModel은 View를 따로 참조하지 않기 때문에 독립적이며 1:n의 관계를 가집니다.

따라서 View는 자신이 이용할 ViewModel을 선택해 데이터를 바인딩하여 업데이트를 받게됩니다.

그 후 Model이 상태 및 데이터가 변경되면 해당하는 ViewModel을 이용하는 View가 자동으로 업데이트됩니다.

ViewModel은 View를 나타내기 위한 Model이자, View의 Presentation Logic을 처리합니다. MVP와 마찬가지로 M-V 사이의 의존성이 없고, MVP처럼 V-VM이 1:1관계가 아닌 독립적이기 때문에 이 둘 사이의 의존성이 없습니다.

 

MVVM의 특징

ViewModel

  • View와 Model 사이의 매개체 역할을 합니다. 즉 Model에서 제공받은 데이터를 UI에서 필요한 정보로 가공한 뒤 View가 가져갈 수 있게 데이터 변경에 대한 "이벤트"를 보내게 됩니다.
  • ViewModel과 View는 MVP 패턴과 다르게 1:n의 관계를 가질 수 있습니다.즉, 여러개의 Fragment가 하나의 ViewModel을 가질 수 있습니다.
  • ViewModel은 View에 영향을 끼칠 수 있는 Model의 상태 관리도 담당합니다.
  • View 또는 Activity Context에 대한 레퍼런스를 가지면 안됩니다. View는 ViewModel의 레퍼런스를 가지지만 ViewModel은 View에 대한 정보가 전혀 없어야 합니다. -> ViewModel이 View의 레퍼런스를 가진다면 LifeCycle에 메모리누수가 발생할 수 있는데, 그 이유는 ViewModel이 destroy외의 라이프사이클에서는 메모리에서 해제되지 않기 때문입니다.
  • 앱이 백그라운드에서 죽는 경우에는 뷰모델도 함께 사라지기 때문에 이 경우에 한해서는 onSaveInstanceState를 통해 복구할 데이터를 저장해야합니다.

View

  • Activity, Fragment, CustomView, Dialog, 등의 UI 컴포넌트를 의미합니다.
  • View는 UI 업데이트를 위해 ViewModel과 바인딩하게 됩니다. 다른 표현으로는 View가 ViewModel에 구독을 하게되고, ViewModel의 상태가 변경되면 그 이벤트를 받아 UI를 갱신합니다.
  • View는 기본적으로 데이터를 보여주기만 해야해서 비즈니스 로직을 포함하지않지만 UI변경과 관련된 일부 로직은 포함될 수 있다.-> 안드로이드는 다른 플랫폼과는 다르게 LifeCycle이라는 특수한 순서를 가지고 있기 때문에 이것을 처리하는 것만으로도 View는 상당히 복잡해지기 때문이다.

Model

  • DataModel이라고도하며 Network, DB, SharedPreference 등 다양한 데이터 소스로부터 필요한 데이터를 준비합니다.
  • ViewModel에서 데이터를 가져갈 수 있게 데이터를 준비하고 그에 대한 "이벤트"를 보냅니다.

 

MVVM의 장점

  • Model과 View 사이, ViewModel과 View사이의 의존성이 없으므로 유닛테스트 및 유지보수가 다른 패턴에 비해 쉽습니다.
  • DataBinding 라이브러리를 이용함으로써 서로 간의 의존성을 낮추고, 유닛 테스트를 더욱 쉽게 작성할 수 있으며 UI 코드는 네이티브 코드에 관여하지 않아도 됩니다.
  • 중복되는 코드를 모듈화 할 수 있습니다.

MVVM의 단점

  • View가 변수와 표현식 모두에 Binding될 수 있으므로 시간이 지남에 따라 관계없는 Presentation Logic이 늘어나고 이를 보완하기 위해 XML에 코드를 추가해야합니다. -> 이렇게 될경우 시간이 지남에 따라 관계없는 Presentation Logic이 늘어나 코드가 증가하게되고 유지보수 단계에서 어려움을 겪을 수 있습니다.
  • ViewModel을 설계하기 어려운 문제가 있습니다.

 

참고 자료

velog.io/@jojo_devstory/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%ED%8C%A8%ED%84%B4-MVVM%EC%9D%B4-%EB%AD%98%EA%B9%8C

 

안드로이드 아키텍처 패턴 - MVVM이 뭘까?

이전 MVC, MVP에 이어서 이번에는 MVVM 패턴에 대해 간략하게 알아보겠습니다.

velog.io

beomseok95.tistory.com/131

 

안드로이드 MVVM 패턴

안드로이드 MVVM 패턴 MVVM의 기본 구조 MVVM의 기본 구조를 그림으로 표현한 것입니다. View는 ViewModel에게 클릭 이벤트, 필요한 데이터 요청등을 명시적으로 하고, viewModel이 notify 할때까지 기다리게

beomseok95.tistory.com

 

'Android' 카테고리의 다른 글

안드로이드 4대 Component  (0) 2021.05.13
MVP 패턴이란?  (0) 2021.05.03
MVC 패턴이란?  (0) 2021.05.03