어떤 언어를 사용하든 간에, 어플리케이션의 성능과 유지보수를 용이하게 하는 코드를 짜기 위해 개발자는 항상 노력하여야 한다. 특히 Kotlin을 이용하여 안드로이드 어플리케이션을 개발할 때에는, 좋은 디자인 패턴이 성능 및 유지보수(안드로이드는 코드가 상당히 많고 복잡하기 때문..!)에 결정적인 영향을 미칠 수 있는데, 오늘은 안드로이드 어플리케이션의 기본 디자인 패턴이 되는 MVVM 패턴에 대해 알아보려고 한다.
MVVM 패턴의 정의
Model + View + ViewModel을 합친 용어로 MVVM 패턴이라 한다. 사실 패턴의 구성을 보면, Model - ViewModel - View 순서가 맞다. (그럼 MVMV 패턴이라 하는게 맞지 않나?)
그렇다면 View, ViewModel Model이 각각 뭐를 칭하는 지에 대해 알아보자!
- View : 사용자가 직접적으로 보는 화면. UI 라고 보면 된다. Android에서는 Activity 또는 Fragment에 해당한다고 보면 된다. 화면에 무엇을 그릴 지 결정하고, 사용자와 직접적으로 상호작용하는 부분으로, 데이터의 변화를 감지하기 위한 Observer를 가지고 있다.
- ViewModel : 뷰모델은 UI를 위한 데이터를 가지고 있다. View와 분리된 구조를 가지기 때문에, 액티비티나 프래그먼트의 생명주기에 영향을 받지 않는다. (뷰모델은 어플리케이션이 종료될 때까지 살아있음.) View와 Model 간의 데이터 처리/중개를 담당한다.
- Model : 어플리케이션에서 사용되는 데이터 및 데이터 조작 부분을 담당한다.
(서버로부터 받아온 데이터를 변수 또는 자체DB(ROOM 등)에 저장 또는 그 데이터를 만지작(?)거리는 부분.)
동작 순서
- 사용자의 Action들이 View를 통해 들어온다.
- View에 Action이 들어오면, Command 패턴으로 ViewModel에 Action을 전달한다.
- ViewModel은 Model에게 데이터를 요청한다.
- Model은 ViewModel에게 요청받은 데이터를 응답한다.
- ViewModel은 응답 받은 데이터를 가공하여 저장한다.
- View는 ViewModel과 Data Binding하여 화면에 나타낸다.
"그래서 MVVM 패턴을 왜 쓴다고?"
결론적으로 말하면 이렇다. UI와 로직의 분리이다. 화면에 보여지는 UI와 실제적인 데이터를 처리하는 로직을 분리함으로써, 유지보수 및 개발 효율을 높일 수 있다.
뿐만 아니라, 액티비티와 프래그먼트로부터 분리시킬 수 있어, 액티비티 및 프래그먼트의 수명주기로부터 자유로워지는 것을 의미한다. 수명주기로부터 자유로워지면, Singleton(싱글톤) 패턴처럼 사용이 가능해져, 프래그먼트들 사이에서 ViewModel을 활용한 데이터 공유 또한 쉬워지게 된다. 이는 어플리케이션의 성능과도 직결된다.
참고
https://kangmin1012.tistory.com/15?category=879935
최근댓글