Android

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

반응형

안드로이드 아키텍처 패턴 주제로 정리해보려 합니다.

 

1. 2021.12.17 - [Android] - 안드로이드 아키텍처 패턴 - 디자인 패턴

 

안드로이드 아키텍처 패턴 - 디자인 패턴

1. 안드로이드 아키텍처 패턴 - 디자인 패턴 2. 안드로이드 아키텍처 패턴 - MVVM 패턴 3. MVVM-ViewModel 과 AAC-ViewModel 이 어떻게 다른가? 디자인 패턴에 들어가기 전, 소프트웨어 아키텍처의 개념부터

codedaeng.tistory.com

2. [현재] [Android] - 안드로이드 아키텍처 패턴 - MVVM 패턴

3. MVVM-ViewModel 과 AAC-ViewModel 어떻게 다른가?

 

 

 

MVVM 구조

 

MVVM 패턴이란?

MVVM 패턴이란 Model, View, ViewModel의 줄임말입니다.

MVVM 패턴은 마틴 파울러의 Presentation 모델 패턴에서 파생된 디자인 패턴입니다.

 

entity와 usecase를 포함한 model계층,

repository혹은 presenter역할을 맡는 중간 계층인 view model,

가장 바깥의 ui를 담당하는 view 계층을 분리해 의존성 규칙에 따라 관심사를 분리한 형태의 디자인 패턴을 말합니다.

 

즉, MVVM 패턴의 목표는 비즈니스 로직과 프레젠테이션 로직을 UI로 부터 분리하는 것. 비즈니스 로직과 프레젠 테이션 로직을 UI로 부터 분리하게 되면, 테스트, 유지 보수, 재사용이 쉬워집니다.

 

 

구성요소

  • View : 사용자에서 보여지는 UI 부분입니다.
    • View는 Activity나 Fragment 같은 화면에 표현되는 레이아웃을 정의함.
    • View는 ViewModel을 관찰하고 있다가 상태 변화가 전달되면 화면을 갱신해야 함.
  • View Model
    • 비즈니스 로직을 담당합니다. View와 관련된 비즈니스 로직은 이 곳에 들어가게 되며 데이터를 잘 가공해서 View에서 뿌리기 쉬운 Model로 바꾸는 역할을 합니다.
    • View를 표현하기 위해 만든 View를 위한 Model입니다. View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분입니다.
    • View가 관찰(Observe)하고 있기에 View가 갱신할 수 있도록 Observable형태(RxJava, Listener, LiveData)로 알리거나 DataBinding을 통해 알려야 합니다.
    • 절대 절대 View의 Context를 지니고 있으면 안됩니다. View와 Lifecycle이 다르기에 메모리릭이 발생할 수 있습니다.
  • Model : 어플리케이션에서 사용되는 데이터와 그 데이터를 처리하는 부분입니다.
    • DataModel이라고도 하며 DB, Network, SharedPreference 등 다양한 데이터 소스로부터 필요한 데이터를 준비함.

 

 

MVVM 장점

  • Model과 View사이, ViewModel과 View사이 의존성이 없습니다.
  • 정확히 말하면 View- > ViewModel -> Model 단방향 디펜던시를 갖습니다.
  • 핵심은 VM 이 V를 의존하지 않는다!!!입니다. 여러개의 뷰가 하나의 뷰모델을 사용할 수 있게 되는 강력한 장점이 생기는 것이죠.
  • 각각 독립적이기에 모듈화하여 개발할 수 있습니다.
  • 개발 기간 동안 개발자와 디자이너가 독립적으로 작업할 수 있다.
    • 디자인이 미리 나오지 않았더라도 비즈니스 로직에 관련된 ViewModel과 미리 정의된 Model을 먼저 개발할 수 있습니다.

 

 

 

 

참고

 

https://velog.io/@jojo_devstory/안드로이드-아키텍처-패턴-MVVM이-뭘까

https://velog.io/@yiniwini/MVVM-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4

https://velog.io/@addiescode/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-MVC-MVVM

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

반응형