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