[Swift] MVC Architecture

YoungHyun Kim·2024년 1월 23일
1

MVC Model - View - Controller

다분히 주관적인 해석이 대부분인 글입니다. 혹시나 다른 분들이 이 글을 보시고 잘못된 부분을 찾으신다면 언제든 피드백을 부탁드리겠습니다. 감사합니다.

1. Model

  • 앱 관련 데이터를 캡슐화하고, 해당 데이터를 조작하고 처리하는 논리와 계산을 정의

struct DataModel {
	var data1: String
    var data2: Int
    var data3: Bool
}

class Operation {
	static var operation: Operation?
    private init() {}
    
    func addQuestionMark(input string: String) {
    	print("\(string)?")
    }
    
    func squareSelf(input number: Int) {
    	print("\(number*number)")
    }
    
    func oppositeValue(input bool: Bool) {
    	print("\(!bool)")
    }
}
  • 위와 같이 data1, 2, 3을 캡슐화하는 구조체 DataModel을 정의하고, 해당 데이터를 조작하고 처리하는 논리와 계산(메서드들)을 정의하는 객체!! 라고 생각하면 되는 것 같다.
  • 앱이 작동하는 중에 지속적으로 유지되는 데이터는 모델 객체에 머물러야 한다.
  • 이상적인 모델 객체는, 뷰 객체와의 명시적인 연결이 없어야 한단다. 뷰에서 모델 객체에 접근하는 방식의 코드가 있으면 안된다는 얘기를 하는 것 같다.
  • 뷰 계층의 사용자 입력이 컨트롤러로 전달되면, 1^1컨트롤러가 모델 객체에게 데이터 업데이트를 요청하고, 2^2모델 객체는 데이터를 변경하거나 수정한 후에 이를 적절한 컨트롤러에게 알립니다.

2. View

  • 사용자가 볼 수 있는 어플리케이션의 객체!!
  • 뷰의 주요 목적은 모델 객체의 데이터를 표시하고, 해당 데이터를 편집(사용자가 해당 데이터에 접근할 수 있도록)할 수 있도록 하는 것
  • 뷰 객체는 1^1컨트롤러 객체를 통해 모델 데이터의 변경 사항에 대한 정보를 받으며 2^2사용자가 변경사항 등을 입력할 때(예를 들면 TextField에 문자를 적거나, Slider를 밀어 값을 변경하려 한다던지...), 이를 컨트롤러 객체를 통해 모델에 전달합니다.

3. Controller

class TodoListViewController: UITableViewDelegate, UITableViewDataSource {
    //...
    //...
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return TodoListViewController.todoList.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = ToDoTableView.dequeueReusableCell(withIdentifier: "ToDoCell", for: indexPath) as! TodoTableViewCell
        
        cell.setCell(TodoListViewController.todoList[indexPath.row])
        return cell
    }
}
  • 하나 이상의 뷰 객체와, 하나 이상의 모델 객체 사이에서 중개자 역할을 한다
  • 컨트롤러는 뷰와 모델 사이의 도관(전기 배선을 보호하고 라우팅하는데 사용되는 튜브 따위..)란다.
  • 1^1뷰 계층에서 사용자가 어떤 버튼을 터치(상호작용)나, 값을 입력했다고 하자. 2^2컨트롤러는 그 상호작용이나 새로운(변경된) 데이터를 모델로 전달한다. 3^3그러면 모델은 데이터를 변화시키고 4^4컨트롤러가 이것을 뷰에 전달해서, 뷰 계층은 해당 데이터를 사용자에게 표시해준다.
profile
iOS 개발자가 되고 싶어요

0개의 댓글

관련 채용 정보