아키텍처
[Swift] MVC 패턴
JSKoder
2023. 3. 13. 21:16
"Model - View - Controller"로 구성된 디자인 패턴은 컨트롤러가 중심이 되어 뷰와 모델에게 각각 필요한 요청을 받아 임무를 수행합니다.
Swift에서는 컨트롤러와 뷰가 합쳐진 ViewController로 동작하며, 이로 인해 ViewController가 필연적으로 비대해질 수 있습니다.
1.1 구조
Model: 앱의 뼈대, 앱의 데이터가 있는 곳
- Business Logic, Extension, Network, Database 등으로 구성됩니다.
- Business Logic이 모델에 포함되어야 하며, 처리되는 객체의 상태값을 변화시키기 위해서는 Notification, KVO, Delegate 등으로 통신해야 합니다
View: UIView 하위 객체들의 집합소 - 즉 시각적 표현, Delegate, DataSource 등으로 ViewController와 연결
- UIView 하위 클래스 (button, UILabel 등), UIKit/AppKit, Core Animation, CoreGraphics 등으로 구성됩니다.
Controller: 사용자와 시스템 간의 연결 고리
- 사용자 요청이 들어오면 비즈니스 로직에 데이터 요청을 하고, 비즈니스 로직은 데이터를 바인딩합니다.
- 그리고 뷰에 데이터로 업데이트를 요청합니다.
1.2 설계 방법
- 첫번째 설계 방법은 컨트롤러에서 비즈니스 로직과 뷰 업데이트를 전부 처리하는 것입니다.
- 두번째 설계 방법은 비즈니스 로직을 모델로 분리하고, 컨트롤러에서 요청하면 비즈니스 로직을 거쳐 데이터를 바인딩한 후 뷰에 업데이트하는 것입니다.
1.3 장단점
장점
- 첫번째 설계 방법은 설계가 쉬워지는 장점이 있습니다.
- 두번째 설계 방법은 비즈니스 로직과 뷰가 분리되어 테스트가 쉬워지는 장점이 있습니다.
단점
- 첫번째 설계 방법은 컨트롤러에서 View와 모델을 모두 처리하여 유닛 테스트가 어려워지는 단점이 있습니다.
- 두번째 설계 방법은 설계가 어려워지는 단점이 있습니다.
- 공통적인 단점으로는 비즈니스 로직으로 처리가 불가능한 로직의 경우에도 컨트롤러에 들어가게 되므로, 컨트롤러가 비대해질 가능성이 높아지며, 컨트롤러가 비대해질 경우 관리가 어려워진다는 점입니다.