반응형

 MVVM

개요

 구글 안드로이드가 앱을 개발한다고 치면, 앱화면 그리고 앱에서 쓰이는 내부동작들을 생각없이 만들진 않았을 거임. 즉, 적어도 화면을 생성하는 코드, 내부 데이터 처리 코드 이렇게 2가지는 필수로 있었을 거임.

 

 여튼, 초기 앱 만드는 구성에 대한 디자인이 계속 수 년동안 발전하다가, 결점을 고치고 조상님들이 실수도 고치고 해서 선배들이 만든게 MVVM 패턴임. (이전에 MVC 같은 패턴도 있음, 그건 먼 조상이 만든거)

 

 그 수많은 역사를 건너 띄고, 한번에 MVVM 패턴을 명확히 이해하는 건 힘들 수 도 있음. 여튼, 그런 역사가 있다는 거를 염두해 두자. 선배들과 조상님들이 삽질한 결과라는 것도.

 

MVVM 패턴 구조

 결국 이 패턴도 여러가지 솔루션 중 하나임. 여튼, MVVM 패턴을 구성하는 3가지 녀석이 있다.

MVVM 패턴 구조 (출처 : 위키피디아)

View : UI 요소를 표시하고, 사용자가 UI를 클릭했을 때, 생기는 이벤트를 받는 역할을 하는 녀석임

ViewModel : UI 요소와 관련된 데이터들을 관리하는 녀석임. 이 때, View와 ViewModel은 끈끈하게 연결되어있음. (DataBinding) 즉, View와 Model을 중재하는 녀석이라고 생각하면 됨.

Model : 실제 데이터를 표현한 녀석임. 프로그램에서 활용할 수 있는 도메인 모델에서 정한 그 데이터가 이 녀석임.

 

뷰가 어느 특정한 모델 플랫폼에 종속되지 않도록 해준다

 사실, 개요에서 설명한 것처럼, 앱이든 웹이든 View와 Model만 있어도 이론적으로는 구현 가능하다.

왜냐하면, UI단에서 뿌려주는 코드와 거기에 속한 데이터를 따로 놓아두는 건, 누가봐도 좋을테니까 말이다.

 

 하지만, 이 뷰가 모델과 끈끈하게 이어져있다면, 어떻게 될까?

자, 이 Model이 바뀐다 그럼 모든 View에게 다 알려줄 것이냐? 만약 그렇다면, 이 Model은 자기 자신이 바뀔 때 마다, 모든 View에게 알려주는(통지하는) 별도의 함수/로직/코드가 필요하다. 그래, 만약 그렇게 다 구현했다면?

 다 구현하고나서, 새로운 데이터가 추가된다고 하네? 데이터베이스 관리자가? 그럼, 새로운 데이터에 대해서도 데이터가 바뀌면 모든 View에게 통지하는 이벤트 (onChanged, notify 등)을 다 코드로 짤 것인가?

 

 처음엔 그랬을거다, 우리 조상/선배님들이, 근데 그렇게하다가 회의감을 느껴서, 중간에 코드 즉, 객체로 하나를 놓아서 이를 중재하게끔 하도록 했다. 이렇게하면 Model과 View는 더 끈끈하지 않고 Model 입장에서 유연해진다.

 

 잘 시간이어서 나중에 수정해서 쓰겠음.

 

 

 

 

참고자료/출처

https://stackoverflow.com/questions/667781/what-is-the-difference-between-mvc-and-mvvm

 

What is the difference between MVC and MVVM?

Is there a difference between the standard "Model View Controller" pattern and Microsoft's Model/View/ViewModel pattern?

stackoverflow.com

 

 

https://developer.android.com/topic/libraries/architecture/viewmodel

 

ViewModel 개요  |  Android 개발자  |  Android Developers

ViewModel을 사용하면 수명 주기를 인식하는 방식으로 UI 데이터를 관리할 수 있습니다.

developer.android.com

 

 

https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EB%B7%B0%EB%AA%A8%EB%8D%B8

 

모델-뷰-뷰모델 - 위키백과, 우리 모두의 백과사전

모델-뷰-뷰 모델(model-view-viewmodel, MVVM)은 하나의 소프트웨어 아키텍처 패턴으로-마크업 언어 또는 GUI 코드로 구현하는-그래픽 사용자 인터페이스(뷰)의 개발을 비즈니스 로직 또는 백-엔드 로직(

ko.wikipedia.org

 

반응형