MVVM 패턴 알아보기

James_·2022년 1월 21일
0
post-thumbnail

MVVM 아키텍쳐

원티드나 로켓펀치 등 구직 사이트 우대사항에서 MVVM에 대한 언급이 아주 많다. 그만큼 실무에서 큰 프로젝트에 적용이 되어있는 패턴이고 앱 아키텍쳐의 중요한 부분이다.
규모가 큰 프로젝트에서 많이 쓰이는 만큼 안드로이드는 MVP,MVVM 패턴을 주로 사용하는 회사들이 많은 것 같다.
더 깊게 공부하고 싶어서 시리즈로 만들 예정이다.
그리고 이 글은 안드로이드 개발자라면 한 번쯤 봤던 찰스의 안드로이드 유튜브를 참고하면서 정리해보았다.
MVVM과 Paging으로 수퍼 빠른 이미지 피커 만들기

구성요소

Model

데이터 저장, 수정, 삭제 관리. 네트워크 통신 기타 등등
Entity, Repository, DB, Util 클래스 등 그 외 모든 것

View

Activity,Fragment,View,ViewDataBinding 등

ViewModel

View에 표현할 데이터를 Model로 부터 가져와 가공하여 관리한다.
AAC ViewModel 클래스, BaseObservable 등

특징

  1. View로부터 완전히 독립된 ViewModel을 사용하는 패턴이다.
  2. View와 ViewModel은 1:N의 관계를 갖을 수 있다. (MVP패턴의 Presenter와 View는 1:1 특징을 갖는다)
  3. UI 변경에 강건한 구조(유연한 구조라고 이해하면 좋을 것 같다)

AAC(Android Architecture Component ViewModel)의 ViewModel과 MVVM의 ViewModel은 다르다.

AAC ViewModel은

  • Configuration Change가 발생해도 뷰모델의 상태를 유지해준다.
  • 범위 내에서 데이터 공유가 쉽다.
  • LifecycleOwner의 생명주기를 알고있다.

AAC ViewModel의 제약사항

  • 절대로 컨텍스트(Context)를 참조해서는 안된다.(Activity도 Context의 한 종류)
  • Activity의 화면회전이 일어나는 경우 기존 액티비티는 파괴되고 새로운 액티비티의 인스턴스가 생성된다 기존의 ViewModel은 기존에 파괴되었던(재생성된) Activity를 계속 참조하고 있게 되는 현상이 발생한다.
    파괴되었던 액티비티를 계속 참조하고 있기 때문에 GC(Garbage Collector)의 대상에서 제외되게 된다.(메모리 누수 발생)
  • 그런 이유 때문에 AndroidViewModel이라는게 있다(액티비티 Context가 아닌 App의 Context). 하지만 찾아본 결과 그냥 ViewModel를 쓰는 걸 권장한다고 한다.

데이터 바인딩

데이터 바인딩을 쓰면 UI와 ViewModel의 데이터를 따라서 xml에서 UI의 상태를 관리할 수 있다.
액티비티의 코드를 상당히 줄일 수 있는 방법이여서 최대한 DataBinding을 많이 쓰고 있다.
ViewModel의 데이터의 상태에 따라서 UI 컴포넌트 상태를 관리할 수 있다(이 말인 즉슨 View는 ViewModel의 데이터에 의존성을 가진다)

후기

찰스님의 안드로이드 유튜브를 보고 아주 MVVM 핵심을 파악할 수 있어서 글로 남기고 싶어서 보면서 정리해보았다.
MVVM에 대해서 아주 잘 알려주셔서 상단에 링크되었던 유튜브 영상을 보면 아주 잘 이해가 될 것 같다.
MVVM을 시리즈로 정리하면 복습하는데 도움이 될 것 같아서 쓸 예정이다.

profile
Android 개발자

0개의 댓글