안드로이드

[android/안드로이드] MVVM이란?

최효식 2022. 4. 29. 01:40

우리는 프로젝트를 구성하고 개발을 할 때 어떻게하면 더 효율적인 코드를 만들고 설계할지 고민을 합니다.

그런 고민끝에 나온 방법론이 바로 디자인 패턴입니다.

 

현재까지 여러가지 디자인 패턴이 계속 나오고 있습니다. 

 

 

이렇게 무수히 많은 디자인 패턴이 있지만 어떤게 정답이라는건 없습니다.

오늘 다뤄볼 디자인 패턴은 요즘 가장 얘기가 많은 MVVM입니다.

 

 

1. MVVM 이란?

 

MVVM이란 이름은 Model - View - ViewModel 을 줄여서 가리키는 말입니다.

 

  • Model :  모델은 우리가 내부저장소(ex. Room , Realm)나 혹은 외부api로부터 data를 관리하는 영역입니다. 
  • ViewModel : 뷰모델은 우리가 data를 어떻게 가공을 하고 처리할지에 대한 비즈니스 로직을 다루는 영역입니다.
  • View : 뷰는 가공된 data를 실제로 Client한테 Ui로 나타내는 영역입니다.

 

그렇다면 왜 MVVM이 다른 MVC나 MVP에 비해서 요즘 많이 사용하는 것일까요?

 

2. MVVM 장점과 단점

 

  • 장점
  1. 단방향 데이터흐름을 가지고있어 View는 ViewModel을 알지만 ViewModel은 View를 알지 못합니다. 마찬가지로 ViewModel은 Model을 알지만 Model은 알지 못합니다. 즉 그렇기 때문에 서로간의 의존성이 떨어져 View , ViewModel , Model은 각각 독립성을 띄고 있습니다.
  2. 서로간의 의존성이 분리되있기 때문에 각 모듈별 유닛테스트가 용이합니다.
  3. View는 ViewModel을 알고 ViewModel은 모르기 때문에 View와 ViewModel의 관계가 N:1이 성립할 수 있습니다. 그러므로 여러 View에서 하나의 ViewModel로부터 data가 필요하다면 재사용이 가능합니다.
  • 단점
  1. 앱의 확장성이 떨어지거나 간단한 설계로도 충분한 앱에선 오히려 더 복잡해질 수 있습니다.
  2. 앱이 너무 복잡해져도 ViewModel의 소스가 비대해질 우려가 있습니다.

 

 

확실히 다른 디자인 패턴에 비해서 각 영역마다 독립성을 띄고 있어 개발을 할 때 각 영역별 로직에 집중을 할 수있습니다.

또한 유지보수도 용이하다고 생각합니다.

마지막으로 MVVM에 대해 MSDN쪽에서 설명한 링크를 첨부하겠습니다.

 

https://docs.microsoft.com/en-us/archive/msdn-magazine/2009/february/patterns-wpf-apps-with-the-model-view-viewmodel-design-pattern