Why?
현재 개인 프로젝트를 MVC(View-Controller-Model)로 개발하고 있으며, 서로 밀접하게 연관되어 있어 변경이 있을 때 많은 사이드 이펙트가 발생했습니다.
그래서? MVVM!
결론부터 말하자면
View와 Model의 결합도가 최대한 없고, 변경에 유연할 수 있는 선택지인 MVVM 패턴으로 변경하기로 결정했습니다.
추가적으로 SwiftUI를 고려하고 있기 때문에 View 완전히 분리하고 싶었습니다.
장점
- 데이터 바인딩을 통해 View-Model 간 동기화할 수 있다.
- View 혹은 Model에 변경에도 서로에 대한 영향(side effect) 최소화한다.
단점
MVVM?
- Model - View - View Model의 조합으로 Model과 View를 바인딩하는 View Model이 추가된 디자인 패턴
- 데이터 바인딩을 통해 데이터의 변경이 발생 시 뷰에 업데이트
Model
- 도메인 모델로서, 행위와 데이터를 아우르는 개념이다.
- 현재 데이터의 상태(값)를 저장하는 주체
- 유효성 검사 등 데이터에 필요한 행위를 정의(메소드)
View
- 사용자에게 보여지는 텍스트, 버튼 등 View의 배치한다.
- 버튼 클릭, 키보드 입력 등 사용자의 이벤트를 감지한다.
ViewModel
- 뷰를 위해 정의된 모델이며, 모델과 뷰를 연결하는 추상화된 바인더 역할을 한다.
- 모델의 상태(값)을 View에 표시하기 위한 정형화된 데이터를 전달하는 중간자 역할을 한다.
- MVP의 Presenter는 View에 대한 참조를 하고 있지만, View Model은 View를 참조하지 않는다.