https://www.vadimbulavin.com/modern-mvvm-ios-app-architecture-with-combine-and-swiftui/
위의 링크를 해석·정리한 블로그입니다.
MVVM의 목적은 UI로부터 비즈니스와 프레젠테이션 로직을 나누는 것이다.
이것은 앱의 핵심 성공 요소가 되는 테스트 가능성과 유지보수성을 향상시킨다.
목표를 이루기 위해, MVVM은 View
의 의사결정을 최소화하고 View
의 상태와 행동을 ViewModel
로 이동한다.
View
는 ViewModel
에서 데이터를 가져오지 않는다,View
는 ViewModel
에서 View
자신을 업데이트할 필요가 없다.View
는 자신의 상태를 ViewModel
에서 관리받는다.MVVM은 UI패턴이다.
MVVM은 다음과 같은 가이드라인을 제공한다.
MVVM은 엄격한 종속성 규칙을 따르는 3개의 구성요소로 나눌 수 있다.
(View
, ViewModel
, Model
)
View
는 ViewModel
에 의존적이다.ViewModel
은 Model
에 의존적이다.ViewModel
과 Model
둘 다 View
에 의존적이지 않는다.※ 여기서 의존적이라는 것은
코드 의존성(import, reference, function call과 같은)을 의미한다.
하지만 데이터의 흐름은 의존성 흐름과 다를 수 있다.
데이터는 양방향으로 흐른다.
먼저 View
에서 처리하는 User의 상호작용으로 시작한다.
다음은 View
는 상호작용 이벤트를 ViewModel
에 전달한다.
ViewModel
은 이벤트를 모델·데이터에 대한 CRUD 작업으로 변환한다.
역방향도 같다.
Model
은 BackEnd/데이터베이스/기타 다른 소스에서 데이터를 패치해온다.
그 다음 Model
은 데이터를 ViewModel
에 전달한다.
ViewModel
은 View
에서 사용하기 편리한 형식으로 데이터를 준비한다.
마지막으로 View
는 데이터를 화면에 렌더링한다.
ViewModel
은 View
에서 표시될 데이터와 프레젠테이션 로직을 포함한다.
ViewModel
의 책임
Model
에서 User에게 표시될 데이터를 준비한다.View
가 사용하기 편리한 방식으로 데이터를 구성한다.ViewModel
과 View
의 관계는 1:NViewModel
과 Model
의 관계는 1:NViewModel
은 UI 프레임워크에서 독립적이다.
View
는 UI를 렌더링하고 User의 상호작용을 전달한다.
상태를 갖고 있지않으며, User의 상호작용을 해석하는 코드 숨김을 포함하지 않는다.
View
의 책임
ViewModel
에게 전달한다.다음 기술은 Swift에서 MVVM의 최신상태라고 생각하는 기술을 나타낸다.
MVVM을 실행 가능하게 하는 가장 중요한 측면은 데이터 바인딩이다.
데이터 바인딩이란
데이터 공급자와 사용자를 연결하고 동기화하는 기술이다.
데이터 바인딩 기술을 사용하여 시간에 따라 변경되는 값의 stream을 만들 수 있다.