개요
SwiftUI의 패턴 MVVM에 대해서 알아보겠다.
MVVM
Model, View, ViewModel의 약자로 소프트웨어 아키텍쳐 패턴중 하나이다.
이 패턴은 뷰와 그 외의 요소 간 의존성을 제거하는 데 집중했다. 뷰모델이 뷰를 알지 못한다면 뷰가 표현할 데이터는 어떻게 전달할 수 있을까?
데이터 바인딩이라는 것을 통해 해결한다. 뷰는 뷰모델을 알고 잇기에 뷰의 UI인스턴스와 뷰모델이 가진 속성을 연결한다.
모델
MVC에서 모델과 동일한 역할을 한다.
실제 앱이 처리하려는 문제와 관련된 비즈니스 로직을 정의하며 데이터를 캡슐화하고 저장한다.
뷰나 뷰모델에 영향을 받지 않고 독자적으로 구성된다.
뷰
버튼, 텍스트, 이미지와 같이 사용자와 상호작용하는 컨트롤이나 사용자가 볼 수 있는 모든 요소를 이용해 UI를 정의하는 곳이다.
뷰는 버튼이 터치되었다는 사실만 뷰모델에 전달만한다. 데이터를 저장하거나 처리를 하지 않는다.
뷰가 직접 뷰모델을 참조하여 필요한 값을 능동적으로 요청한다.
뷰모델
뷰에 대한 추상화와 데이터 바인딩을 위한 모델 구체화 역할을 수행한다. 한마디로 뷰와 모델의 중간다리 역할을 한다.
뷰와 모델에서 각각 요구하는 값의 타입이 다를 수가 있다. 이것을 바꿔주는 코드는 UI적인 요소도, 로직적인 부분도 아니다. 이런 부분이 들어간다.
뷰모델은 모델의 데이터를 참조하여 뷰에 적합한 형태로 바꿔주는 역할을 하며 뷰는 뷰모델의 속성에 바인딩한다.
뷰모델은 뷰의 상태를 저장하고, 뷰에서 발생하는 액션에 따라 수행할 앱의 기능을 정의한다.
MVVM의 장점
- 이미 다른 곳에서 사용중인 모델을 사용할 수 있다.
- 개발 프로세스에서 뷰와 앱의 로직에 대해 독립적으로 동시에 작업할 수 있다.
- 테스트에 용이하다.
MVVM의 단점
- 디버깅이 까다롭다.
- 뷰모델을 설계하기가 어렵다.
- 모델의 데이터를 뷰모델에서 다시 작성함으로 코드들이 길어진다.