Swift 디자인패턴 MVC Pattern (MVC 패턴)
MVC 패턴은 개발 아키텍처 중 하나로 모바일, 서버 등 다양한 곳에서 활용.
- 다만 남용할 경우 Massvie View Controller라는 불리듯이 유지보수가 어려워질 수 있음.
- 아주 간단한 기능을 제외하곤 유지보수를 위해 추천하지 않음.
히스토리
- 2022-04-08: 디자인 패턴 스터디 정리
- 2024-11-28: 포스팅 글 재정리 및 예제 변경
코드 예제
가장 간단한 예제를 첨부
- 일반적으로 View랑 ViewController를 분리하지 않고 사용
- MVVM 패턴 리팩토링: https://rldd.tistory.com/384
import UIKit
import SwiftUI
import Combine
private struct Model {
var name: String
var count: Int
}
private class ViewController: UIViewController {
// MARK: - State
@Published var model: Model = .init(name: "김철수", count: 0)
private var cancellables: Set<AnyCancellable>
// MARK: - Action
enum Action {
case up
case down
}
// MARK: - Mutation
func send(action: Action) {
switch action {
case .up:
model.count += 1
case .down:
model.count -= 1
}
}
private func bind() {
$model
.sink { [weak self] model in
guard let self else { return }
self.label.text = model.name + "의 숫자는" + "\(model.count)"
}.store(in: &cancellables)
}
init() {
self.cancellables = .init()
super.init(nibName: nil, bundle: nil)
bind()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - UIComponents
private lazy var upButton: UIButton = {
let btn = UIButton()
btn.addTarget(self, action: #selector(upButtonTapped), for: .touchUpInside)
return btn
}()
@objc
private func upButtonTapped() {
send(action: .up)
}
private lazy var downButton: UIButton = {
let btn = UIButton()
btn.addTarget(self, action: #selector(upButtonTapped), for: .touchUpInside)
return btn
}()
@objc
private func downButtonTapped() {
send(action: .down)
}
private let label = UILabel()
}
(참고)
'apple > DesignPattern, Architecture' 카테고리의 다른 글
Swift 디자인패턴 Memento Pattern (메멘토 패턴) (0) | 2022.04.13 |
---|---|
Swift 디자인패턴 Singleton Pattern (싱글톤 패턴) (0) | 2022.04.12 |
Swift 디자인패턴 Strategy Pattern (전략 패턴) (0) | 2022.04.11 |
Swift 디자인패턴 Delegation Pattern (딜리게이트 패턴) (0) | 2022.04.10 |
[Swift] Class Diagram + 스터디 (0) | 2022.04.07 |