기어가더라도 제대로

MVVM 초 간단 정리 본문

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 를 하는 것이 옳은 것 같다.

참조

iOS 개발자 HeeChan 님

Comments