
MVC Design Pattern이란?
[정의]
- 디자인 패턴 중 하나이며, 앱의 개체를 Model, View, Controller로 3가지로 나누어 앱에서 수행하는 역할과 객체가 서로 통신하는 방식을 정의한다.
[특징]
- Model layer, view layer라고도 부르기도 한다.
- MVC는 Cocoa 애플리케이션을 위한 좋은 디자인 패턴이다.
- 전역 아키텍쳐와 관련이 있고 앱에서 수행하는 역할따라 개체를 분리한다는점에서 상위수준패턴이다.
- 객체지향 프로그램은 MVC디자인 패턴을 디자인에 적용함으로써 여러가지 이점을 제공한다.
[이점]
- 재사용 가능성이 높고 인터페이스가 더 잘 정의되는 경향이 있다.
- 전반적으로 변화하는 요구사항에 더 잘 적응한다.
- MVC 디자인패턴을 가진 앱은 다른 앱보다 쉽게 확장할 수 있다.
- 게다가 많은 Cocoa 기술과 아키텍처는 MVC를 기반으로 하며 사용자 정의 개체가 MVC 역할 중 하나를 수행한다.
복합적인 MVC Design Pattern
Model : 데이터의 개체이다.
[정의]
- 앱에 데이터를 캡슐화하고 해당 데이터를 조작처리하는 논리와 계산을 정의함 ex) 게임 캐릭터, 주소록의 연락처
- 데이터 및 기본동작을 캡슐화한다.
[특징]
- 앱의 데이터의 대부분은 앱에 로드된 후에도 Model에 존재해야한다. 이유는 Model은 특정 문제 영역과 관련된 지식과 전문 지식을 나타내므로 유사한 문제 영역에서 재사용 할 수 있다.
- 데이터를 표시하고 사용자가 해당 데이터를 편집할 수 없도록 View와 명시적인 연결이 없다. 하지만 예외는 있따. 예시로 그래픽을 나타내는 Model이 있는 그리기 앱이다. 그래픽 개체가 존재하는 주된 이유는 시각적인 것을 정의하는 것이라서 그래픽 개체가 스스로 그리는 방법을 아는 것은 이치에 맞다. 그러나 이경우에도 그래픽 객체는 특정 관점이나 어떤 관점에서 사는 것에 전혀 의존해서는 안되며, 스스로 그려야할 때를 아는 책임도 져서는 안된다.
[소통방법]
- 데이터를 생성하거나 수정하는 View레이어의 사용자 작업은 Controller를 통해 전달되며 결과적으로 Model개체가 생성되는걸 업데이트 한다.
View: 사용자 UI의 개체이다.
[정의]
- 주요목적은 프로그램의 모델개체에서 데이터를 표시하고 해당 데이터를 편집할 수 있도록 한다.
- 사용자에게 정보를 제공하는 객체를 보여준다.
[특징]
- 데이터를 저장할 책임이 없다. 물론 View가 실제로 표시하는 데이터를 저장하지않는다는 의미는 아니다. View는 성능 상의 이유로 데이터를 캐시하거나 유사한 트릭을 수행할 수 있다.
- View개체는 Model개체의 한 부분만 표시하거나 전체 Model개체를 표시하거나 여러 다른 모델 개체를 표시하는 역할을 수행할 수 있다.
- 그럼에도 불구하고 뷰 개체는 일반적으로 MVC응용 프로그램의 모델 개체에서 분리된다. 이유는 일반적으로 재사용하고 재구성하기때문에 보기 개체는 응용프로그램간에 일관성을 제공한다.
- UIKit 및 AppKit 프레임워크는 모두 View 클래스 모음을 제공하고 Interface Builder는 라이브러리에 수십 개의 View 개체를 제공합니다.
- 사용자 작업의 응답할 수 있다.
[소통방법]
- 앱의 Controller를 통해 Model데이터 변경사항에 대해 학습하고 사용자(UI)가 시작한 변경사항을 전달한다.
Controller: [정의]하나이상의 View와 Model 사이에서 중개자 역할을 한다.
- View와 Model을 연결해준다.
- View와 Model변경 사항을 학습한다.
- 응용 프로그램에 대한 설정 및 조정작업을 수행하고 다른 개체의 수명주기(Life Cycle)를 관리할 수도 있다.
[소통방법]
- 일반적인 Cocoa MVC 디자인에서 사용자가 View를 통해 값을 입력하거나 선택 항목을 표시하면 해당 값이나 선택 항목이 Controller에 전달됩니다.
- View에서 수행된 사용자(UI)작업을 해석하고 새로운 데이터 또는 변경된 데이터를 Model에 전달한다.
- Model이 변경되면 Controller는 해당 새로운 Model 데이터를 View에 전달하여 표시하도록 한다.
- 예를들어 “새 값추가” 또는 “현재 레코드 삭제” 또는 Model 개체 중 하나에서 변경된 값을 반영하도록 할 수 있다.
- Controller는 일반유형에 따라 재사용 가능하거나 불가능 할 수 있다. Cocoa Controller 객체의 유형은 Cocoa의 다양한 컨트롤러 객체유형을 설명한다
역할 결합
- 예를들어 객체가 Controller와 View역할을 모두 수행하도록 객체가 수행하는 MVC역할을 병합할 수 있다. 이 경우 ViewController라고 한다.
- Model Contoller개체를 가질 수도있다. 일부 앱의 경우 이역할을 결합하는 것이 허용되는 디자인이다.
Cocoa(Touch)란?
[정의]
- OSxiOS용 앱개발 환경이다.
- Cocoa와 Cocoa Touch에는 모두 Objc-C 런타임과 두 가지 핵심 프레임 워크가 존재한다
- Foundation 및 Appkit프레임워크를 포함하는 Cocoa는 OS X에서 실행되는 앱 개발에 사용된다.
- Foundation 및 UIKit 프레임워크를 포함하는 Cocoa Touch는 iOS에서 실행되는 앱 개발에 사용된다.
[NOTE]
- Cocoa라는 용어는 Objc-c 런타임을 기반으로 하고 루트 클래스인 NSObject에서 상속되는 모든 클래스 또는 개체를 일반적으로 지칭하는데 사용되었다.
Cocoa 또는 Cocoa Touch라는 용어는 각 플랫폼의 프로그램 방식 인터페이스를 사용하는 애플리케이션 개발을 언급할 때도 사용된다.
[FramWork]
- Foundation 프레임워크는 루트 클래스인 NSObject를 구현한다.
- 기본 개체 동작을 정의한다. 기본유형(String, Int) 및 Collection(Dictionary, Array)를 나타내는 클래스를 구현한다.
- Foundation은 국제화, 개체지속성, 파일관리 및 XML처리 기능을 제공한다.
- 해당 클래스를 사용하여 포트, 스레드, 잠금 및 프로세스와 같은 기본 시스템엔터티 및 서비스에 접근할 수 있다.
- 앱의 사용자(UI)를 개발하기위해 Appkit 및 UIKit프레임 워크를 사용한다.
- 이 두 프레임워크는 목적이 동일하지만 플랫폼에 따라 다르다.
[UI 구성하기위한 기능들]
- 여기에는 이벤트 처리, 그리기, 이미지 처리, 텍스트처리, 타이포그래피 및. 앱 간 데이터 전송을 위한 클래스가 포함된다.
- 여기에는 테이블 보기, 슬라이더, 버튼, 텍스트필드 및 경고 대화상자와 같은 사용자 인터페이스 요소도 포함된다.
궁금한점
- Model설명에서 Model은 다른 모델 개체와 일대일 및 일대다 관계를 가질 수 있으므로 때때로 응용프로그램의 모델 계층이 하나이상의 개체 그래프를 효과적으로 사용하는 경우가 있다.