아키텍처(Architectuer)
애플리케이션을 설계하고 구축하는데 사용되는 구조와 패턴을 나타낸다.
모델의 구성과 동작 원리, 구성요소 간의 관계 및 시스템 외부 환경과 관계 등 포괄하여 설명하는 설계도 같은 것
MVC (Model-View-Controller)
- 애플리캐이션의 구성 요소를 모델(Model) , 뷰(View), 컨트롤러(Controller)로 분리하는 패턴이다.
- 모델은 데이터 및 비즈니스 로직을 타나태며, 뷰는 사용자 인터페이스를 표시하고, 컨트롤러는 사용자 입력을 처리하고 모델 및 뷰 간의 상호 작용을 조정한다
- Cocoa 및 Cocoa Touch 프레임워크는 MVC 아키텍처를 기반으로 구축되었다.
Model
- 데이터 저장, 가공, 관리 등과 같은 역할을 담당
- 사용자 정보, 애플리케이션 설정, 네트워크에서 가져온 데이터 등
- 주로 클래스(class) 또는 구조체(struct)로 구현된다
View
- 사용자에게 데이터를 시각적으로 표시하고 사용자의 입력을 받는 인터페이스 역할을 담당
- 인터페이스의 구조, 레이아웃, 디자인 담당
- 주로 UIKit 프레임워크에서 제공하는 UI 요소들로 구현된다.
- 사용자에게 정보를 표시하거나, 사용자와 상호 작용하기 위한 기능을 포함한다.
Controller
- 모델과 뷰 간의 상호 작용을 관리하고 중재하는 역할
- 사용자 입력을 처리하고 그에 따른 모델의 변경을 조정, 변경된 데이터를 뷰에 반영한다.
- 사용자 이벤트를 처리하고 모델 및 뷰를 업데이트 하는데 사용된다.
- UIViewController 가 컨트롤러 역할을 담당
// 모델: 할 일을 나타내는 구조체
struct TodoItem {
let title: String
var completed: Bool
}
// 뷰: 할 일 목록을 표시하는 UITableView를 사용한 뷰 컨트롤러
class TodoListViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var todoItems: [TodoItem] = []
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
}
// UITableViewDataSource 프로토콜 메서드
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return todoItems.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TodoCell", for: indexPath)
let todoItem = todoItems[indexPath.row]
cell.textLabel?.text = todoItem.title
cell.accessoryType = todoItem.completed ? .checkmark : .none
return cell
}
// UITableViewDelegate 프로토콜 메서드
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
todoItems[indexPath.row].completed.toggle()
tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
// 컨트롤러: 사용자 입력을 받아 모델을 업데이트하고 뷰를 갱신하는 역할
class TodoListController {
let viewController: TodoListViewController
init(viewController: TodoListViewController) {
self.viewController = viewController
}
// 사용자 입력에 따라 모델을 업데이트하고 뷰를 갱신
func addNewTodoItem(_ title: String) {
let newItem = TodoItem(title: title, completed: false)
viewController.todoItems.append(newItem)
viewController.tableView.reloadData()
}
}
'◽️ Programming > T I L' 카테고리의 다른 글
ToDoList 앱 만들기 (1) (0) | 2024.03.19 |
---|---|
앱의 생명주기 개념 정리 (0) | 2024.03.18 |
두 배열 내 요소 비교 ( contains , elementsEqual ) (0) | 2024.03.14 |
if let 문 내 쉼표(,) 를 통한 다중 옵셔널 바인딩 (0) | 2024.03.14 |
readLine().split 의 활용 방법 터득 (0) | 2024.03.13 |