UIKit 기초
MVVM 초 간단 정리
Damagucci-juice
2022. 6. 14. 00:36
MVVM ?
- UI 코드와 비 UI 코드를 분리하기 위한 아키텍쳐 패턴
모델 - 뷰 모델 - 뷰로 이루어 진다.
주로 반응형 로직을 담고 있는 SwiftUI 나 RxSwift 와 함께 썼을 때 그 맛이 배가 된다.
Model
- 데이터와 관련된 코드를 담는다.
- 구조체, 네트워크 로직, JSON 파싱 코드 등이 포함된다.
- View 와 ViewModel을 전혀 모르는게 가장 좋다.
View
- 앱의 UI에 대한 코드를 담고 있는 계층
- 디자인적 요소
- ViewModel 로 부터 데이터를 어떻게 가져올지, 배치할지 결정
- ViewModel 의 어떤 메서드를 사용하는지도 간혹 있다.
- View 는 재사용성이 강조된다.
- 컴포넌트를 적당히 잘 나누어 중복 코드를 줄이는 것이 중요하다.
- View 는 Model 을 직접 소유하지 않아야한다.
ViewModel
- 앱의 핵심적인 비지니스 로직을 담고 있는 코드의 계층
- MVC 패턴의 Controller 와 비슷
- View의 요청에 의해 로직을 수행한다.
- Model 의 변화에 따라 View 를 Refrash 한다.
MVC -> MVVM 하려는 이유
- MVC 는
- VC 가 주인공이고
- 그 VC가 View와 Model 을 다 알고 있다.
- 이렇게 결합되어 있으면 단위 테스트 하기가 불편하다. (기본적으로 Swift 는 View를 테스트하는 것이 어렵다.)
반면에
- MVVM 은 View 가 주인공이고
- ViewModel 만 알고 있어도 된다.
- 반응형에 적합하다.
- 단위 테스트를 하기 적합하다.
- (ViewModel 이 우리가 원하는 값을 내놓는지만 보면 되므로)
애플이 선언형 코드와 반응형에 적합한 구조로 가려고 드라이브를 걸고 있다.
MVVM 계층의 연결
- 데이터 바인딩을 통해 View 와 ViewModel 을 연결한다.
- ViewModel 이 해야할 일을 VC가 아니라 View 가 직접하도록 한다.
결론
진짜 MVVM 을 하고 싶다면 Swift UI 나 UIKit + RxSwift 를 하는 것이 옳은 것 같다.