GGURUPiOS

Swift Architecture - MVVM 본문

Swift/Architecture

Swift Architecture - MVVM

꾸럽 2023. 4. 25. 18:04

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의 바인딩을 통해 데이터 변화를 자동으로 뷰에 반영시킬 수 있음
  • 동시 작업에 유리

참고

iOS Architecture Patterns