1.3 Model-View-Controller

Joohyun·2022년 5월 4일
0

MVC

  • model, view, controller 3개의 type은 각각 다른 type과 소통하는 특정한 역할을 가진다.

Models

  • 앱의 고유한 아이템, 컨셉을 표현하는데 쓰이는 데이터의 집합으로 구성
    ex) to-do list에서의 할일, 게임에서의 캐릭터, 전화번호부의 연락처, 가게의 물건

  • model object는 다른 model object와 연결될 수 있다.
    ex) car라는 model object는 driver property를 가진다.
    ex) game character는 inventory item의 배열을 가진다.

  • 일반적으로 새로운 Swift 파일에 structure 또는 class를 정의하여 생성한다.

  • 해당 type의 특성을 표현하는 property들로 구성되며, 자신의 property를 수정하기 위한 method들이 존재할 수 있다.

역할

  • view 또는 controller를 통해 사용자와 상호작용한다.

  • model object에서 생성된 메세지는 controller object(주로 view controller의 subclass)를 통해 view로 전달된다.

  • 직접적으로 view와 연결될 수 없다.

Views

  • 인터페이스의 시각적 부분

  • model object에 대한 데이터를 나타내고, 사용자가 데이터를 수정할 수 있도록 허락한다.

  • 서로 다른 model 데이터를 보여주기 위해 재사용될 수 있다.
    ex) Contacts App에서 view object는 모든 연락처 정보를 보여주는데 쓰인다.

  • model object를 화면에 보여지는 형태로 가공하기 위해 model object를 parameter로 갖는 update, configure 함수를 가지는 경우가 있다.
    ex) image view에 플레이어의 사진, label에 플레이어의 점수를 할당한다.

  • 주로 Interface Builder의 view로 정의된다.

  • view controller에서 outlet, action의 형태로 사용된다.

역할

  • model object에 대한 데이터를 나타내는데 사용되지만, 그자체로 model object의 특성을 갖는 것이 아니며 model object를 직접적으로 수정할 수 없다.

  • controller를 통해 model object를 수정한다.

Controllers

  • view object와 model object 사이의 메신저 역할을 한다.

  • 사용자가 view와 상호작용을 하면, view는 controller에게 전달하고 controller는 model object를 업데이트한다.

  • model object가 생성되거나 수정될 경우, controller는 view를 새로운 데이터로 업데이트한다.

View Controller

  • iOS 개발에서 가장 일반적인 controller type

  • view controller는 subview에 상응하는 view를 제어하고, 주로 하나 이상의 model object에 대한 정보를 보여준다.

  • model object 또는 model object의 집합은 주로 view controller에서 property로 정의된다.

  • 사용자가 view 또는 control과 상호작용하면, model object를 수정하는 view controller의 action이 호출된다.

1. Model Controllers

  • view controller가 view를 제어하는 것처럼, model controller는 model object 또는 model object의 집합을 제어한다.

  • model controller를 생성하는 경우

    • 여러개의 object 또는 scene이 model 데이터에 접근할 때

    • model 데이터를 추가, 수정, 제거하는 과정이 복잡할 때

    • view controller가 view를 관리하는데 집중하기 원할 때

ex) 사용자의 메모를 서버와 연동시키는 간단한 메모 앱

  • scene
    • list view
      • table view를 통해 모든 메모를 보여줌
    • detail view
      • 새로운 메모를 생성, 기존 메모를 읽거나 수정
  • controller
    • model controller
      • 메모 model data 관리 (서버로부터 메모 데이터 가져오기, 메모 생성, 수정, 제거, 서버에 메모 저장 등)
    • view controller
      • view에 메모 표시, 서버 통신

2. Helper Controllers

  • app의 다른 object에서 접근이 가능하도록 관련 data와 기능을 모아놓은 controller
    ex) NetworkController: app의 모든 네트워크 요청 관리

  • 다른 controller들의 역할과 관계없이 매우 특정한 기능 수행
    ex) NoteDetailViewController: 각각의 note instance에 대한 세부정보를 보여주고 사용자의 입력에 따라 메모를 수정하고 생성함

역할

  • model과 view 사이를 중재하는 것 이외에, 다른 view controller object와 직접적으로 상호작용하고 일한다.

    ex) NoteListViewController
    메모 리스트를 보여주기 위해, model controller인 NoteControllernotes property에 접근한다.

    ex) NoteController
    helper controller인NetworkController를 통해 새로운 메모가 존재하는지 확인한다.

    ex) NetworkController
    새로운 메모를 발견하면 다운로드 후 NoteController에게 전송하고, NoteControllerNoteListViewController에게 view를 업데이트 하도록 지시한다.

Project Organization

  • 명백하고 기능을 설명할 수 있는 이름으로 생성한다.
    (file, class, struct, protocol, property, function)
    ex)
    ProductListTableViewController.swift O
    MainVC.swift X

  • class, structure, protocol, enumeration 등을 정의할 때 파일을 분리하여 각각 type을 정의한다.
    ex)
    Car.swift, Driver.swift, RaceTrack.swift, Garage.swift O
    Model.swift X

  • 파일을 폴더를 통해 적절하게 그룹핑한다. (아래는 표준 그룹핑 방법)

    • View controllers
    • Views
    • Models
    • Model controllers
    • Other controllers
    • Protocols
    • Extensions
    • Resources
      • Storyboards
      • Frameworks
profile
IOS Developer

0개의 댓글