꾸준히 안타치기

MVC 패턴(Model - View -Controller) 본문

iOS/디자인패턴

MVC 패턴(Model - View -Controller)

글자줍기 2021. 12. 16. 05:30
반응형

📘 Model - 데이터 클래스( 프로세스가 동작중일때 메모리(변수)안에 데이터가 있는 상태)
⭐️ Controller |  모델과 뷰를 이어주는 부분
-  모델의 데이터를 해석하고 구성해서 뷰에게 전달한다.
- 뷰에서 발생하는 이벤트를 입력받아 처리 /UI로직
- 뷰와 모델을 변화시키는 알고리즘이나 소스코드가 위치한 곳
📱 View - 화면에 표현 / 사용자 눈에 보이는 모든 것 
버튼, UI레이블, 등등 (뷰는 컨트롤러의 하인)

Model - View - Controller 

MVC(Model-View-Controller) 디자인 패턴은 애플리케이션의

객체를 모델, 뷰, 컨트롤러  가지 역할  하나의 역할로 할당합니다.

 패턴은 애플리케이션 내에서 객체가 수행하는 역할 뿐만 아니라 객체가 서로 통신하는 방식을 정의합니다.

  • 모델과 뷰는 커뮤니케이션이 불가하다. 컨트롤러를 통해서만 가능 
  • 뷰는 데이터를 가지고 있지 않다. 컨트롤러가 모델에게 이야기해서 가져다 준다.
  • 뷰의 버튼이 눌러질때마다 컨트롤러의 타겟을 호출한다. (델리게이트와, 데이터소스 사용)
  • 모델이 통신하는 방법에는 Notification & KVO가 있다.

 

MVC 패턴을 사용하는 이유는?

이 패턴을 따르면 데이터를 수정해도, 비지니스 로직이나 화면코드에 영향을 미치지 않고, 화면을 표현하는 코드를 수정하더라도

비지니스 로직이나 데이터를 관리부분에 영향을 미치지 않아서 프로그램을 유연하게 만들수 있다.

 

MVC 패턴의 장점

  • 코드 재 사용이 용이함
  • 단순한 구조로 대중적으로 쓰임
  • 여러 인터페이스를 적요하기 에 편함

MVC 패턴의 단점

컨트롤러에 소스코드가 집중되는 경향이 있고 모듈화가 잘안된다.

프로젝트가 복잡하고 커질경우 코드 재사용성과 유지보수가 어렵다.

 

https://www.youtube.com/watch?v=ogaXW6KPc8I 

 

 설계된 모델 클래스
모델 클래스, 즉 모델 객체를 생성하는 클래스는 Core Data technology를 사용하고 있는 경우 NSManagerdObject 서브 클래스를 많이 사용합니다. Objective-C 언어를 사용하는 경우 모델 클래스는 일반적으로 NSObject의 서브클래스입니다. 스위프트 언어를 사용하는 경우에는 특별한 경우가 아니라면 NSObject를 상속받지 않습니다. 또, 값 타입의 모델이 필요한 경우 클래스 대신에 구조체를 활용하기도 합니다.

 

모델 서브클래스를 구현할 , 클래스 디자인에서 다음 사항을 고려하세요.

인스턴스 변수 애플리케이션 내에 캡슐화된 데이터를 유지하기 위한 인스턴스 변수를 선언합니다. 인스턴스 변수는 객체, 스칼라 값, 또는 NSRange와 같은 구조체(structure)일 수 있습니다. 비객체형(nonobject types)대신 객체형을 사용하는 데에는 장단점이 있으므로, 객체 상호 관계(object mutuality)를 고려해야 합니다.
접근자 메서드(Accessor methods) 프로퍼티 접근자 메서드는 일반적으로 인스턴스 변숫값을 획득 및 설정하며, 흔히 획득자 및 설정자 메서드(getter and setter methods)라고도 알려져 있습니다. 스위프트의 언어를 사용하는 경우, 인스턴스 변수를 private 또는
fileprivate 등으로 접근을 제한한 경우, 인스턴스 외부에서(fileprivate의 경우는 다른 소스파일에서) 접근하려면 접근자 메서드가 필요합니다.
 -(Key-value) 코딩 키-값 코딩은 클라이언트가 프로퍼티 이름을 키로 사용하여 객체의 프로퍼티에 접근할 수 있게 하는 메커니즘입니다. Core Data에서 사용하고 있으며 Cocoa의 다른 곳에서도 사용하고 있습니다. 접근자 메서드의 이름 지정 (또한, 암시적으로는 선언된 프로퍼티의 이름 지정)이 이 메커니즘의 요소가 됩니다.
초기화  할당 해제 (Initialization and deallocation) 대부분 모델 클래스는 인스턴스 변수를 적절한 초깃값으로 설정하는 이니셜라이저 메서드를 구현합니다. 여기서 초기화는 이니셜라이저 메서드의 표준 형식을 따라야 하며,
deinit 메서드에서 객체 값을 가지는 모든 인스턴스 변수를 해제해야 합니다.
객체 인코딩 모델 클래스의 객체를 보관하려는 경우, 해당 객체의 인스턴스 변수를 인코딩 및 디코딩할 수 있어야 합니다.
객체 복제 클라이언트가 모델 객체를 복제할 것으로 예상하는 경우, 클래스에서 객체 복제를 구현해야 합니다.

 객체 (View Objects)

뷰 객체는 애플리케이션 내에서 사용자가 볼 수 있는 객체를 말합니다. 자신이 보이는 방법을 알고 있고 사용자 동작에 응답할 수 있습니다. 뷰 객체의 주된 목적은 애플리케이션의 모델 객체의 데이터를 보여주고 해당 데이터를 편집할 수 있도록 하는 것입니다. 그럼에도 불구하고, 뷰 객체는 MVC 애플리케이션의 모델 객체와는 일반적으로 분리됩니다. 주소록을 예를 들면 전화번호 및 정보가 보이는 화면들을 말합니다.

 

컨트롤러 객체 (Controller Objects)

컨트롤러 객체는 하나 이상의 애플리케이션 뷰 객체와 하나 이상의 모델 객체 사이의 코디네이터 또는 중개자 역할을 합니다. 모델-뷰-컨트롤러 디자인 패턴에서 컨트롤러 객체(또는 컨트롤러)는 사용자가 버튼을 탭/클릭하거나 텍스트 필드에서 텍스트를 입력하는 것처럼, 뷰 객체에서 이루어진 사용자 동작 및 의도를 해석하며, 신규 혹은 변경된 데이터를 모델 객체에 전달합니다. 따라서 컨트롤러 객체는 뷰 객체로 하여금 모델 객체의 변경사항을 인지하거나, 그 반대의 경우가 가능하도록 하는 매개체가 됩니다. 컨트롤러 객체는 애플리케이션의 설정 및 조정 작업을 수행할 수도 있으며, 다른 객체들의 생애주기(life cycle)를 관리하기도 합니다. iOS 환경의 Cocoa Touch 프레임워크는 코디네이팅 컨트롤러, 뷰 컨트롤러의 두 가지 기본 컨트롤러 유형을 제공합니다.

코디네이팅 컨트롤러 (Coordinating Controllers)
코디네이팅 컨트롤러는 애플리케이션 전체 혹은 일부 기능을 감독하고 관리 합니다. 애플리케이션별로 다른 로직이  애플리케이션에 주입(injected)되는 장소라고   있으며,  기능은 다음과 같습니다.

 델리게이션(delegation) 메시지에 응답하고 알림(notifications) 관리.

 사용자가 버튼과 같은 컨트롤을  하거나 클릭함에 따라 전송되는 동작 메시지(action message) 응답.

 객체 간의 연결을 확립하거나 기타 설정 작업을 수행. (: 애플리케이션을 시작하는 경우)

 소유한(owned) 객체의 생명 주기 관리.

 iOS 애플리케이션에서는  컨트롤러가 코디네이팅 컨트롤러의 역할을 겸하는 경우가 많습니다.

 

 컨트롤러 (View Controller)
UIKit에서  컨트롤러는 콘텐츠를 화면에 표시하는 뷰를 관리하며, 해당 뷰에 대한 참조(reference) 유지하고,  컨트롤러는  뷰의 프레젠테이션(presentation)  후속 뷰로의 전환(transition) 관리합니다. 이와 관련된 모든 프레젠테이션 동작  컨트롤러 객체에 의해 관리되고 구현됩니다. 또한, 모달뷰를 표시하고 메모리 부족 경고에 응답하며 기기의 방향(orientation) 바뀔  뷰를 회전시킵니다.

iOS  컨트롤러는 UIViewController 서브클래스의 인스턴스입니다. UIKit UITableViewController 같은, UIViewController 여러 특수 목적 서브클래스를 제공합니다. 컨트롤러가 모델과  간에 데이터를 중개하도록 반드시 프레임워크의 -컨트롤러 클래스( : UIViewController, UITableViewController ) 확장하십시오.  컨트롤러는 여러 가지 프레임워크 객체에 대한 델리게이트 혹은 데이터 소스 객체인 경우가 많습니다.

 

집중력게임 만들어보기

 


참고

https://www.boostcourse.org/mo326/lecture/16877?isDesc=false 

 

iOS 앱 프로그래밍

부스트코스 무료 강의

www.boostcourse.org

 

https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

 

Model-View-Controller

Retired Document Important: This document may not represent best practices for current development. Links to downloads and other resources may no longer be valid. Model-View-Controller The Model-View-Controller (MVC) design pattern assigns objects in an ap

developer.apple.com

https://www.edwith.org/swiftapp/lecture/26620?isDesc=false 

 

[LECTURE] MVC(Model-View-Controller) 패턴 : edwith

들어가기 건물을 건설할때 우리에게 필요한 것은 설계도 입니다. 하지만 초보 설계자에게는 설계도를 어떻게 만들어야 할지가 하나의 숙제가 될 수 있습니다. 만약 설계도를 그리는 방법에... -

www.edwith.org

 

반응형

'iOS > 디자인패턴' 카테고리의 다른 글

MVVM + Rxswift + UIkit을 사용하며 알게된 것  (0) 2023.02.27
MVVM의 개념과 나오게된 배경  (0) 2022.10.05
싱글턴 패턴  (0) 2022.05.25
프로그래밍 디자인패턴  (0) 2021.12.16
Comments