ANDROID/ARCHITECTURE

[Android] MVVM 패턴이란?! (feat. 예제 소개)

GaGah 2020. 6. 1. 13:07

[Android] MVVM 패턴이란?!  (feat. 예제 소개)

※ 안드로이드의 아키텍처 MVVM 을 공부해보자!

 

 

[들어가기]

※ 디자인 패턴을 생각하게 된 이유

   안드로이드 개발을 하면서 어떻게 구조화를 할지, 설계 단계에서 시간을 많이 안 쏟았던 것 같다. 해커톤과 같은 짧은 기간 내에 프로젝트를 진행하며(SOPT APPJAM) 모든 것을 완벽하게 구현해야한다는 급박함이었을까?

  이제는 좀 더 구조적이고 모듈화된, 깔끔하고 유지보수가 쉬운 코드를 짜보려한다.

 

※ 어떻게 진행될까?

   - 간단한 프로젝트와 함께 MVVM을 적용해보자

   - MVVM 구조에 대해 정확한 이해와 고민을 해보는 시간을 갖자

   - 더 나아가, DI, Coroutine, DataBinding, RxJAVA 등을 프로젝트에 적용해보자

 

 

 

[시작하기]

 

 

1. MVVM 이란?

 

MVVM은 2005년에 John Gossman에 의해 소개된 디자인 패턴으로 Model-View-ViewModel의 약자다. MVC, MVP 패턴등의 단점을 보안하기 위해 나왔다.

View에서는 UI의 관련된 일만, ViewModel은 View에 관련된 로직들을 처리하는 일, Model은 데이터 처리 담당을 한다.

 

 

 

2. MVVM 은 어떻게 구성되는가?!

 

일단, ※관심사 분리! 를 해야한다

 

MVVM 구조

 

 

  ① VIEW

      - Activity 나 Fragment 와 같은 UI 기반의 클래스는 UI 및 운영체제 상호작용을 처리하는 로직만 포함해야 한다.

      - 최대한 가볍게 유지하며 생명주기 관련 문제를 피하도록 하자.

 

  ② MODEL

      - 앱의 데이터를 처리를 담당

      - View와는 독립적이여야 하며, 생명주기에는 영향을 받지 않도록 한다.

      - 네트워크 연결이 취약하거나 연결이 되어있지 않아도 앱은 실행되고 돌아가야 한다.

 

  ③ VIEWMODEL

     - View와 Model을 연결시키는 역할

     - View와 관련된 모든 비즈니스 로직은 이 곳에 들어간다.

     - 데이터를 잘 가공해서 View에서 뿌리기 쉬운 Model로 바꾸는 역할을 한다.

 

 

 

** MVVM이 모든 상황에서 적합한 구조는 아닐 수 있다. 그 상황에 맞게 최선의 방법을 생각하고 구현하기!

안드로이드 공식문서

 

 

<앞으로의 간단한 예제 소개>

 - Chatting 뷰, PartnerInfo 뷰 2가지로 구성한다.

 - 1 : 1 대화 상황 하나만 있다고 가정한다.

 - RoomDB를 통해 이전 대화내용들을 저장하고 앱에 접근했을 때, 내용들을 뷰에 보여준다.

 

 

 

 

[참고]

https://poqw.github.io/about_mvvm/

공식문서 : https://developer.android.com/jetpack/docs/guide?hl=ko

lifecycle : https://codelabs.developers.google.com/codelabs/android-lifecycles/index.html?hl=ko#6

LIST