GGURUPiOS
Swift Architecture - MVVM 본문
MVVM ( Model - View - ViewModel )
- MVVM에서 ViewController 는 View 로 취급
- View와 Model사이에 의존성을 낮춤
IOS 에서의 ViewModel?
View 와 그 상태를 UIKit에 독립적으로 표현한 것
ViewModel 은 Model 의 변경 사항을 호출하고 업데이트 된 Model로 자체 업데이트 하며 View 와 ViewModel 사이에 바인딩 되어 있으므로 뷰가 자동으로 업데이트 됨
바인딩(Binding)?
View와 ViewModel 사이의 양방향 데이터 흐름
( 쉽게 말하면: 데이터가 바뀌었으니 뷰를 업데이트, 터치 이벤트를 받았으니 데이터를 업데이트 등 )
Swift 에서는 따로 편리한 바인딩 수단이 없음 ( SwiftUI에서는 combine 이 있음 ) 물론, KVO(Key-Value Observing)이 있긴 함
RxSwift 같은 라이브러리를 활용해서 작성할 수 있음
Rx를 써서 앱을 구현할 때, 한가지 주의할 점은 호출 순서가 잘못돼서 디버깅 하는데에 많은 시간이 걸릴 수 있음
장점
- ViewModel에 비즈니스 로직이 집중 되어있으므로 테스트 용이성을 높임
- View와 ViewModel사이에 양방향 바인딩을 통해 뷰와 뷰모델이 서로를 감시하고 업데이트 할 수 있음 (유연성)
- 결국 재사용성과 유지보수에 도움을 줌
MVC와 비교했을 때?
- View와 ViewModel이 강하게 분리해서 의존성을 낮춤
- View와 ViewModel의 바인딩을 통해 데이터 변화를 자동으로 뷰에 반영시킬 수 있음
- 동시 작업에 유리
참고
'Swift > Architecture' 카테고리의 다른 글
[Swift/Coordinator] coordinator 패턴에서의 childCoordinator 할당 해제 (0) | 2024.03.13 |
---|---|
Swift Architecture - Clean Architecture + MVVM (예제) (0) | 2023.04.27 |
Swift Architecture - Clean Architecture (0) | 2023.04.27 |
Swift Architecture - MVC (0) | 2023.04.25 |