[안드로이드] MVVM 아키텍처 패턴

Lee Jun Hyeong·2023년 5월 1일
0

Android 톺아보기 😇

목록 보기
12/17

MVVM 아키텍처 패턴

Model: MVC의 Model과 동일한 역할

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

View: 레이아웃을 정의함

  • 기본적으로 데이터를 보여주기만 한다. 하지만 UI변경과 관련된 비즈니스 로직이 포함될 수 있다(Android는 생명주기라는 플로우를 가지고 있기 때문에 이것을 처리하는 것만으로도 복잡해짐)

ViewModel: View와 Model 사이의 매개체 역할

  • View와 관련된 비즈니스 로직이 들어가며 데이터를 가공해서 View에 뿌리기 쉬운 Model로 바꾸는 역할
  • MVP와 달리 View와 ViewModel이 1:N의 관계를 가질 수 있다.(Presenter와 달리 View에 대한 참조가 없음)
  • View가 데이터 바인딩(Data Binding)할 수 있는 속성과 명령으로 구성되어 있다.

정리하자면,

  • 사용자 입력은 View로 전달되며, View는 ViewModel이 제공하는 데이터를 관찰하여 UI를 업데이트 한다.
    View는 자신이 이용할 ViewModel을 선택하여 데이터를 바인딩(binding)하여 업데이트를 받게 된다.
  • Model의 상태나 데이터가 변경되면 해당하는 ViewModel을 이용하는 View가 자동으로 업데이트 된다.
    ViewModel은 View를 나타내기 위한 Model이며, View의 Presentation Logic을 처리한다.

장점

View가 데이터를 실시간으로 관찰할 수 있음

  • LiveData(Observable 패턴)을 사용하기 때문에 데이터베이스를 관찰하고 자동으로 UI를 갱신한다.
  • 직접 Vieww를 바꾸는 번거로움이 없고 데이터와 불일치할 확률이 줄어든다.

생명주기로부터 안전하며 메모리 누수를 방지함

  • ViewModel을 통해 데이터를 참조하기 때문에 Activity나 Fragment의 생명주기를 따르지 않는다. 예를 들어, 화면 전환으로 Activity가 재구성되어도 ViewModel이 데이터를 유지하고 있기 때문에 영향을 받지 않는다.
  • View가 활성화되어 있을 경우에만 작동하기 때문에 불필요한 메모리 사용을 줄일 수 있다.

역할을 분리함으로써 묘듈화함

  • UI, 비즈니스 로직, DB가 기능별로 모듈화 된다.
  • 유닛테스트가 용이해진다.
  • 중복되는 코드도 모듈화 할 수 있다.

View와 Model 사이에 의존성이 없음

  • View 와 ViewModel 사이에 의존성이 존재하지 않아 독립적이므로 모듈화가 가능하다.
  • 모듈간의 의존성을 분리해 유지보수가 용이해지는 장점이 있다.

AAC 등 여러 라이브러리를 접목하여 개발이 가능

  • LiveData, DataBinding

단점

  • ViewModel 설계가 복잡하다.
  • 아주 큰 응용 프로그램에서데이터바인딩을 사용한다면 눈에띄게 메모리르 소모하게 된다.

예제


참고
https://junyoung-developer.tistory.com/140?category=946439
profile
"왜" 사용하며, "어떻게" 사용하는지에 대해

0개의 댓글