MVVM패턴은 Model, View, ViewModel의 약자이다. 프로그램의 비지니스 로직과 프레젠테이션 로직을 명확하게 분리 하는 패턴이다.
MVVM의 등장배경
기존에 사용하던 MVC패턴에서 아무래도 Controller에 사용되는 코드가 많고 집중되다 보니, MassiveVC라는 단점이 있었고 이를 보완하기위해 MVVM패턴이 등장하게 되었다.
그럼 MVVM과 MVC의 차이?
MVC 패턴은 Controller가 View와 Model을 통해서 데이터를 전달받지만 MVVM패턴은 ViewModel이 view와 model을 통해서 데이터를 주고받아 바인딩과 의존성 주입 등의 기능을 사용하여 유연하고 테스트 가능한 코드를 작성할 수 있다.
MVVM패턴 설계시 목표는 비지니스 로직과 프레젠테이션 로직을 UI로 부터 분리하는 것이다.
동작원리
모델은 실제 상태 내용을 표현하는, 도메인 모델을 참조하거나, 데이터 접근 계층을 참조한다.
데이터와 비지니스 로직을 담당한다. ex) 데이터베이스, 네트워크 요청등
사용자의 인터페이스를 담당하는 역할을 한다.
사용자가 보는 부분들을 표시하고 input, action등을 처리한다.
View와 Model사이에서 중재자 역할을 수행한다. view에서 발생하는 이벤트를 감지하고, 해당 이벤트에 맞는 비즈니스 로직등을 수행한다.
Model과 상호작용하여 데이터를 가져오고, view에 데이터를 업데이트 한다.
만약 ViewModel 파일안에 import UIKit을 했다면? ViewModel은 View로 부터 어떤한것도 알지 못해야한다.
MVVM은 View와 ViewController사이에 1대n의 관계로 되어있습니다.
데이터 바인딩을 사용해 view와 viewModel사이의 의존성을 없앨수 있습니다.