Model, View, ViewModel 약자를 딴 디자인 패턴의 한 종류
Model(비즈니스 로직), View(UI), ViewModel(프레젠테이션 로직)으로 로직을 분리하여 테스트, 유지보수, 재사용을 쉽게 만드는것!
어떠한 특정값을 얻기위해 데이터의 처리를 수행하는 응용프로그램의 일부를 말한다. 즉 원하는 값을 얻기위해 일어나는 각종처리를 일컫는 말
보여주기위한 로직을 말한다. 즉 화면성의 디자인 구성을 위한 로직을 일컫는 말로써, 비지니스 로직들을 어떻게 사용자에게 보여줄지에 대한 로직입니다.
View로부터 완전히 독립된 ViewModel을 사용하는 패턴View와 ViewModel은 1:N의 관계를 갖을 수 있다. 
View만 변경해주면 된다! (ViewModel의 독립성 덕분에 가능)
View는 ViewModel을 알지만, ViewModel은 View를 알지 못합니다.
ViewModel은 Model을 알지만, Model을 ViewModel을 알지 못합니다.
이런 구조를 통해서 ViewModel 과 Model이 View로 부터 독립적인 형태를 만들어서 위에서말한 UI로 부터 비즈니스 로직과 프레젠테이션 로직의 분리라는 목적을 이룰 수 있게 된 것입니다.
View
View의 역활은 UI에 관련된 것을 다루는 것입니다.
사용자가 스크린을 통해 보는 것들에 대한 구조, 레이아웃, 형태를 정의하며, View는 애니메이션과 같은 UI로직을 포함하되 비즈니스 로직을 포함하지 말아야 합니다.
ViewModel
ViewModel의 역할은 View가 사용할 메서드와 필드를 구현하고, View에게 상태변화를 알리는 것입니다.
ViewModel에서 제공하는 메서드와 필드가 UI에서 제공할 기능을 정의하고, View가 이기능을 어떻게 보여줄것인지를 결정합니다.
일반적으로 ViewModel과 Model은 일대다 관계를 형성합니다.
ViewModel은 View가 쉽게 사용할 수 있도록 Model의 Data를 가공해서 View에게 제공합니다.
Model
Model은 비즈니스 로직과 유효성 겁사화 데이터를 포함하는 앱의 도메인 모델로 생각할 수 있습니다.
Model은 앱에서 사용할 데이터에 관련된 행위와 데이터를 다룹니다.
장점
ViewModel이 Model과 View 사이의 어댑터로서 변경이 생겼을 때 변경을 최소화 할 수 있습니다.
Model과 ViewModel이 View로부터 독립적입니다.
ViewModel과 Model을 플랫폼 독립적으로 개발할 수 있습니다.
테스트하기 쉽습니다.
개발 기간동안 개발자와 디자이너가 동시에 독립적으로 (병렬적으로) 작업할 수 있다.
UI디자인이 나오지 않았더라도 미리 정의된 `Model`과 `ViewModel`을 먼저 개발할 수 있기 때문에 병렬적인
업무 프로세스가 가능합니다.
단점
참조
https://velog.io/@k7120792/Model-View-ViewModel-Pattern
https://www.youtube.com/watch?v=07ES0ne-_U8&t=1151s