MVC 패턴 (Model - View - Controller)
MVC 디자인 패턴은 애플리케이션의 객체를 모델, 뷰, 컨트롤러의 세 가지 역할 중 하나로 할당한다.
이 패턴은 앱 내에서 객체가 수행하는 역할 뿐만 아니라 객체가 서로 통신하는 방식을 정의한다.
세 유형의 객체는 각각 추상적인 경계에 의해 다른 객체와 구분되며, 그 경계를 넘어 다른 유형의 객체와 통신한다.
각각의 역할을 분리하여, 개발과 유지보수를 편리하게 한다.
모델 (Model)
프로그램이 하는 일 자체를 의미한다.
애플리케이션과 관련된 데이터를 캡슐화하고, 해당 데이터를 조작하고 처리하는 로직과 계산을 정의한다.
ex. 게임 속 캐릭터의 정보, 주소록의 연락처
뷰 (View)
사용자와 상호작용하는 interface
애플리케이션 내에서 사용자가 볼 수 있는 객체
뷰 객체의 주된 목적은 애플리케이션의 모델 객체의 데이터를 보여주고, 해당 데이터를 편집할 수 있도록 한다.
ex. 주소록의 연락처가 보이는 화면
컨트롤러 (Controller)
모델과 뷰를 연결하는 역할
UI에서 발생하는 일에 따라 모델을 업데이트하고, 반대로 모델에 변동이 생기면 UI도 변하도록 한다.
하나 이상의 애플리케이션 뷰 객체와 하나 이상의 모델 객체 사이의 중개자 역할을 한다. ➡️ 모델과 뷰에 독립성을 줌
사용자가 버튼을 탭하거나 텍스트 필드에서 텍스트를 입력하는 것처럼, 뷰 객체에서 이루어진 사용자의 동작 및 의도를 해석하며, 신규 혹은 변경된 데이터를 모델 객체에 전달한다.
즉, 뷰 객체가 모델 객체의 변경사항을 인지하거나, 그 반대가 가능하도록 하는 매개체가 된다.
컨트롤러 객체는 애플리케이션의 설정 및 조정 작업을 수행할 수도 있으며, 다른 객체들의 생애 주기를 관리하기도 한다.
모델 - 뷰는 서로 접근할 수 없고, 컨트롤러는 모델과 뷰에 접근할 수 있다.
모델 ➡️ 컨트롤러
모델에서 컨트롤러로 접근은 가능하지만, MVC 패턴에 어긋난다.
MVC 패턴에 따르면, 모델은 데이터의 값을 바꾸고 관리하는 것만 담당하기 때문이다.
그렇다면, 모델의 값이 바뀌었을 때 이 값을 어떻게 컨트롤러에 전달할까 ? ➡️ Notification
Notification : 모델이 컨트롤러에게 자신의 값이 바뀌었다는 사실을 알려서, 컨트롤러가 이를 듣고 모델에 접근하도록 함
뷰 ➡️ 컨트롤러
뷰의 역할은 화면을 갱신하는 것이기 때문에, 뷰에서의 변화를 컨트롤러에게 직접 전달하면 안된다.
iOS에서는 이를 Delegate, Datasource를 사용해 해결한다.
Delegate, Datasouce 는 따로 정리해서 올리겠습니다....
'iOS' 카테고리의 다른 글
[iOS] 뷰의 재사용 (0) | 2020.06.11 |
---|---|
[iOS] 테이블 뷰 (TableView) - DataSource, Delegate (0) | 2020.06.10 |
[iOS] Foundation (0) | 2020.06.10 |
[iOS] UIKit (0) | 2020.06.10 |
[iOS] 내비게이션 인터페이스 (0) | 2020.06.09 |