Computer Science/swift 뽀개기 - 참고 사이트 저장소

[ios] swift MVVM vs MVC 차이

_cactus 2022. 1. 26. 10:30
반응형

MVVM

: MVC와 마찬가지로 애플리케이션 개발에 주로 사용되는 디자인 패턴
  Model - View - ViewModel

💡 MVC와 MVVM 단순차이

  • Controller가 아닌 ViewModel 계층을 가지고 있음
  • ViewModel 또한 Controller처럼 View와 Model의 중간 계층 역할을 함

 

1. Model

: 데이터와 관련된 코드를 담고 있는 계층 (MVC의 Model과 마찬가지)

  • 데이터를 담아두기 위한 구조체들(struct)
  • 네트워크 로직
  • JSON 파싱 코드
  • 등 ...
struct Person { // Person에 대한 데이터 담은 구조체
  let name: String
  var age: Int

  init(json: JSON) { // JSON 파싱
    name = json["name"].stringValue
    age = json["age"].intValue
  }
}
반응형

2. View

: 앱의 UI에 대한 코드를 담고 있는 계층

  • 각 컴포넌트에 대한 정보
  • 배치 정보
  • 재사용성이 강조됨

 

3. ViewModel

: 앱의 핵심적인 비즈니스 로직을 담고 있는 계층

  • view와 model 사이에서 view의 요청에 따라 로직을 실행하고, model의 변화에 따라 view refresh 등..

💡MVC → MVVM 넘어가는 이유 ?

  • 기존에 많이 사용한 UIKit 프레임워크는 MVC 패턴을 기반으로 만들어졌음
  • 최근에 나온 SwiftUI는 MVVM 패턴을 기반으로 함
  • UIKit에선 ViewController가, SwiftUI에선 View가 주인공

 

UIKit

  • UIKit의 MVC에선 ViewController가 거의 모든 역할을 했음. ViewController는 View와 Model 계층을 모두 소유
  • ViewController단위로 한 화면이 구성됨 → Controller는 View와 Model을 모두 알고있어야 함
  • ViewController는 비즈니스로직 외에도 View에 대한 설정, 수정 등의 코드를 포함 → View와 Controller 계층을 제대로 분리X → ViewController의 코드가 길어질 수 밖에

SwiftUI

  • View가 ViewModel 소유, ViewModel이 Model을 소유하는 방식
  • 화면을 주도하는 것은 View → ViewModel은 Model만 알면됨 (View 알 필요X)
  • ViewModel은 비즈니스로직만 가지도록 깔끔하게 분리되어있음 → 코드 길이 짧음! 🙂
  • 각 계층이 더욱 모듈화되어있음 → 테스트하기 용이

🔎 User 상호작용이 일어났을때.. (예: 버튼 누름)

  • MVC : user 상호작용이 일어났음을 View → Controller로 알림 & 그에 따라 어떤 행동을 할지는 Controller가 정함
  • MVVM : 어떤 행동을 할지는 View가 정함. ViewModel은 로직만 가지고 있음

🔎 데이터가 변경되었을때.. (예: 버튼 누름)

  • MVC : 데이터의 변경이 일어났음을 Model → Controller로 알림 & 그에 따라 View를 다시 어떻게 그릴지는 Controller가 정함
  • MVVM : 데이터의 변경이 일어났음을 Model → ViewModel로 알림 & ViewModel은 변경사항을 바로 View에게 전달하는 역할만 하고, View가 알아서 다시 그림

 

 

728x90
반응형