MVC 패턴
MVC는 Model-View-Controller의 약자로, 애플리케이션을 세 가지 주요 부분으로 나누는 디자인 패턴입니다. 이 패턴은 애플리케이션의 내부 표현과 사용자 인터페이스를 분리하여 유지보수성과 확장성을 높이는 것을 목표로 합니다.
- Model (모델): 데이터와 비즈니스 로직을 관리합니다. 데이터베이스, 네트워크와 상호작용하거나 애플리케이션의 상태를 관리합니다.
- View (뷰): 사용자 인터페이스 요소를 관리합니다. 모델의 데이터를 사용하여 사용자에게 보여주는 역할을 합니다.
- Controller (컨트롤러): 사용자 입력을 받아서 처리하고, 모델과 뷰 사이에서 중개자 역할을 합니다. 입력된 데이터를 모델에 전달하고, 모델의 변화를 뷰에 전달합니다.
Swift에서 MVC 패턴 적용 예시
아래는 간단한 Swift 코드 예제입니다. 이 예제에서는 MVC 패턴을 사용하여 사용자 정보를 표시하는 애플리케이션을 만듭니다.
Model
import Foundation
class User {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
View
import UIKit
class UserView: UIView {
private let nameLabel = UILabel()
private let ageLabel = UILabel()
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupView()
}
private func setupView() {
addSubview(nameLabel)
addSubview(ageLabel)
// 레이아웃 설정 (예를 들어, 오토 레이아웃 사용)
nameLabel.translatesAutoresizingMaskIntoConstraints = false
ageLabel.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
nameLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
nameLabel.topAnchor.constraint(equalTo: self.topAnchor, constant: 20),
ageLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor),
ageLabel.topAnchor.constraint(equalTo: nameLabel.bottomAnchor, constant: 20)
])
}
func updateView(with user: User) {
nameLabel.text = "Name: \(user.name)"
ageLabel.text = "Age: \(user.age)"
}
}
Controller
import UIKit
class UserController: UIViewController {
private var userView: UserView!
private var user: User!
override func viewDidLoad() {
super.viewDidLoad()
// 모델 생성
user = User(name: "John Doe", age: 30)
// 뷰 생성 및 설정
userView = UserView(frame: self.view.frame)
self.view.addSubview(userView)
// 모델 데이터를 뷰에 전달
userView.updateView(with: user)
}
}
Swift에서 많이 쓰이는 아키텍처 패턴들
MVVM (Model-View-ViewModel)
- MVC의 단점을 보완하기 위해 만들어진 패턴입니다.
- ViewModel이 View와 Model 사이의 데이터를 변환하고, 뷰에 맞는 형식으로 제공하는 역할을 합니다.
- 데이터 바인딩을 통해 뷰와 ViewModel 간의 통신을 쉽게 할 수 있습니다.
MVP (Model-View-Presenter)
- MVC와 유사하지만, 컨트롤러 대신 프레젠터를 사용하는 패턴입니다.
- 프레젠터는 뷰와 모델 간의 모든 상호작용을 처리하며, 뷰는 사용자 인터페이스만을 담당합니다.
- 뷰의 독립성을 높이고 테스트 용이성을 개선합니다.
VIPER (View-Interactor-Presenter-Entity-Router)
- 더욱 분리된 구조를 제공합니다.
- 각 역할이 명확히 분리되어 있어, 테스트와 유지보수가 용이합니다.
- 단점은 상대적으로 복잡하다는 점입니다.
Clean Architecture
- Uncle Bob에 의해 제안된 아키텍처로, 의존성을 역전시켜 비즈니스 로직을 독립적으로 유지합니다.
- 각 계층이 명확히 분리되어 있어, 확장성과 유지보수성이 뛰어납니다.
- 상대적으로 설계와 구현이 복잡할 수 있습니다.
이러한 아키텍처 패턴들은 애플리케이션의 규모와 요구사항에 따라 적절히 선택하여 사용하는 것이 중요하다고 생각합니다. 각각의 패턴은 고유한 장단점이 있으며, 프로젝트의 특성에 맞게 활용하는 것이 바람직할 것 같습니다.
반응형
'TIL (Today I Learned)' 카테고리의 다른 글
[TIL] 2024. 07. 05 (0) | 2024.07.06 |
---|---|
[TIL] 2024. 07. 04 (0) | 2024.07.04 |
[TIL] 2024. 07. 02 (0) | 2024.07.03 |
[TIL] 2024. 07. 01 (0) | 2024.07.01 |
[TIL] 2024. 06. 28 (0) | 2024.06.28 |