MVC는 소프트웨어 디자인 패턴으로, 앱의 구성 요소들을 세가지 주요 컴포넌트로 분리하여 코드의 유지보수성과 재사용성을 높여준다.
Model(모델)
struct Todo {
var title: String
var category: String
var isCompleted: Bool
}
View(뷰)
class TodoTableViewCell: UITableViewCell {
// 테이블 뷰 셀을 커스텀하여 배치 - 사용자 인터페이스 및 시각적 표현
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var categoryLabel: UILabel!
@IBOutlet weak var completionCheckmark: UIImageView!
}
Controller(컨트롤러)
class TableViewController: UITableViewController {
var todoList: [Todo] = [] // 모델 데이터
override func viewDidLoad() {
super.viewDidLoad()
// todoList 초기화 등의 로직
}
// 테이블 뷰 데이터 소스 및 델리게이트 메서드 구현
// ...
// 할 일 추가 버튼을 눌렀을 때 호출되는 메서드
@IBAction func addTodoButtonTapped(_ sender: UIButton) {
// TodoManager를 사용하여 할 일 추가
TodoManager.shared.addTodo(title: "새 할 일", content: "", category: "일반", isCompleted: false)
tableView.reloadData()
}
}
MVC 구조는 상기와 같으나, 내가 개발한 코드는 View와 Controller가 거의 밀접하게 연관되어 대체적으로 ViewController에서 모든 로직을 수행하는 구조로 되어있다.
스토리보드로 앵간한 UI는 다 구현하다보니, View로 분류할 코드가 다 VC에 작성되어버렸다.
그리고 TodoManager 같은 경우에는 컨트롤러라고 볼 수 있지만, 데이터를 다루는 역할을 하기 때문에 모델로 분류했다.
장점
단점
MVVM(Model-View-ViewModel)
MVP(Model-View-Presenter)
VIPER
Clean Architecture
Flux, Redux
이때까지 실습을 대체적으로 스토리보드로 UI를 구현하고 그에 따른 로직을 ViewController에서 작업하다보니 뷰와 컨트롤러의 경게가 모호해지는 일이 있었다.
하지만 복잡도나 어려움의 정도가 적어서 그대로 유지할 수 있었지만, 향후 프로젝트 규모가 커지면 스파게티 코드가 될 것 같아 벌써 아득해진다.
MVC 구조 외에도 여러가지 소프트웨어 아키텍처 패턴이 있으므로, 각 패턴(구조)의 장단점을 알아보고 최적의 구조를 선택해서 개발을 하면 될 것 같다!!