내일배움캠프 7기 Day32 TIL(3)

Daisy Kim·2023년 8월 24일
0

🔍 아키텍처(Architecture)란?

앱의 확장성을 높이고, 협업과 유지 및 보수를 용이하게 하기 위해 앱 구성요소들의 역할과 책임을 분리시키는 것.

아키텍처의 종류

  • MVC(Model-View-Controller)
  • MVVM(Model-View-ViewModel)
  • VIPER(View-Interactor-Presenter-Entity-Routing)
  • Ribs 등...

🔍 MVC 아키텍처 패턴

M (Model) : 데이터를 처리
V (View) : UI를 표시
C (Controller) : Model과 View 사이에 데이터를 주고 받을 수 있게 연결하는 인터페이스

관련문서

Model Objects(데이터 처리)

특징

  • 앱에서 사용되는 데이터를 다루는 영역
  • 데이터의 저장, 수정, 삭제를 담당
  • 데이터 상태변경에 대한 알림을 View 또는 Controller에 전달

View Objects(UI 표시)

특징

  • 앱 사용자가 보게되는 영역을 담당(UIView 등)
  • 데이터를 표시하고, 사용자의 입력을 받아서 처리
  • 데이터 상태변경을 감지하여 변경된 내용을 화면에 반영

Controller Objects(둘 사이의 연결고리 역할)

특징

  • Model과 View 사이에서 데이터를 주고 받음
  • View에서 발생하는 이벤트를 처리, Model을 업데이트 ⇒ Model에서 변경된 내용을 다시 View에 전달하여 화면에 반영
<코드예시>
// Model, View, Controller의 분리
// Model
struct User {
    let name: String
    let age: Int
}

// View
struct User {
    let name: String
    let age: Int
}

required init?(coder: NSCoder) {
        fatalError("초기화가 구현되지 않았습니다.")
    }
    
    func displayUser(_ user: User) {
        nameLabel.text = user.name
        ageLabel.text = "나이: \(user.age)"
    }
}

// Controller
class UserController: UIViewController {
    private let user: User
    private let userView: UserView
    
    init(user: User, userView: UserView) {
        self.user = user
        self.userView = userView
    }
    
    func updateUser(name: String, age: Int) {
        let updatedUser = User(name: name, age: age)
        userView.displayUser(updatedUser)
    }
}

// 사용 예시
let user = User(name: "김도연", age: 31)
let view = UserView(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
let controller = UserController(user: user, userView: view)
controller.updateUser(name: "김철수", age: 32)
profile
Technology proderit homini

0개의 댓글