Idealim
article thumbnail

/* 본 게시물은 '안드로이드의 MVC, MVP, MVVM 종합 안내서', '코틀린으로 쇼핑몰 앱 만들기',

'[디자인패턴] MVC, MVP, MVVM 비교' 의 내용을 토대로 작성되었습니다. */

참고 자료

[안드로이드의 MVC, MVP, MVVM 종합 안내서] : https://academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/

[[디자인패턴] MVC, MVP, MVVM 비교] : https://beomy.tistory.com/43

 


#MVVM

1. MVVM란?

MVVM은 Model-View-ViewModel의 약자로 Model, View, ViewModel의 관심사를 분리해 서로간의 의존성을 줄이고 뷰를 단순화시켜 유지보수성을 높일 수 있는 패턴이다. 모델은 데이터를 관리하고 뷰는 UI를 관리하면 뷰모델은 데이터와 UI 간의 연결고리가 되어준다.

MVVM 제어 흐름

View는 Model을 모르지만 ViewModel을 알고 있다. ViewModel은 View를 모르지만 Model을 알고 있다. ViewModel은 Model이 변경된 것을 감지해 UI를 위한 데이터를 변경해야 하며 View는 ViewModel의 데이터가 변경된 것을 감지해 UI를 업데이트해야 한다. 또한 View를 통해 들어온 사용자 인터랙션은 ViewModel에게 전달되어 특정 로직이 실행된다.

2. MVVM 동작

MVVM 패탠의 동작 순서는 다음과 같다.

  1. 사용자의 Action들은 View를 통해 들어오게 됩니다.
  2. View에 Action이 들어오면, Command 패턴으로 ViewModel에 Action을 전달합니다.
  3. View Model은 Model에게 데이터를 요청합니다.
  4. Model은 View Model에게 요청받은 데이터를 응답합니다.
  5. View Model은 응답 받은 데이터를 가공하여 저장합니다.
  6. View는 View Model과 Data Binding하여 화면을 나타냅니다.

3. MVVM 특징

MVVM 패턴은 Command 패턴과 DataBinding 두가지 패턴을 사용하여 구현되어있다. Command 패턴과 DataBinding을 이용하여 View와 ViewModel 사이의 의존성을 업앴다. ViewModel 과 View는 1:n 관계이다.

 

MVVM에서는 보통 데이터 바인딩을 필수 기술로 간주한다. 여기에는 UI와 View를 Activity 등으로부터 분리해 의존성을 줄이기 위한 목적도 있다. 데이터 바인딩을 이용하면 복잡한 코드 없이 View와 ViewModel을 연결해줄 수 있는데, 안드로이드에서는 이것이 LiveData 나 RxJava 등으로 구현될 수 있다. 

 

안드로이드에서 ViewModel을 사용할 때 주의해야 할 점은 ViewModel에 컨텍스트 객체를 저장해서는 안된다. ViewModel의 생명 주기는 컨텍스트 객체와는 다르기 때문에 뷰모델이 컨텍스트 객체를 들고 있는 경우 메모리 릭을 일으킬 수 있다. 이 경우 컨텍스트를 감싼 인터페이스를 만들고 ViewModel에서 WeakReference 타입으로 관리하며 간접적으로 로직을 호출하는 방법이 있다. 

4. MVVM 장점

  • MVVM 패턴은 View와 Model 사이의 의존성이 없다. 
  • Command 패턴과 Data Binding을 사용하여 View와 ViewModel 사이의 의존성 또한 없앤 디자인패턴이다. 따라서, 각각의 부분은 독립적이기 때문에 모듈화 하여 개발할 수 있다.

5. MVVM 단점

  • MVVM 패턴의 단점은 ViewModel의 설계가 쉽지 않다는 점이다.
반응형
profile

Idealim

@Idealim

읽어주셔서 감사합니다. 잘못된 내용이 있으면 언제든 댓글로 피드백 부탁드립니다.