티스토리 뷰

오늘 정리해볼 내용은 바로 바로 바로 ~~~ 대표적인 디자인 패턴 중 하나인 MVC입니다. ㅎㅎ 

프로그램을 만들때 이러한 디자인 패턴을 따르는 이유는 유지보수를 쉽게 하기 위함인데요.

여러 디자인 패턴 (MVC, MVP, MVVM.. 등등)중 가장 기초적이며 Apple이 권장하는(?) MVC 패턴은 Model - View - Controller의 줄임말입니다.

 

Model: 데이터에 관한 로직 담당 (데이터 값 변경 및 관리)

View: 사용자에게 보여지는 화면 담당 (UI)

Controller: Model과 View 연결 (Model 값을 View에 보여줌)

 

MVC 패턴에서 중요한 부분!  View와 Model은 절대로 서로에게 접근하면 안됩니다.

 

Stanford youtube 강의 참고

위 사진에 나오는 것처럼 Model과 View는 Controller만 접근 수 있습니다.

역으로 Model과 View 역시 Controller에 접근 가능하지만 그렇게 하지 않습니다. (-> 패턴에 어긋나는 방법)  

 

그럼 View에 사용자의 입력이 감지되거나 View의 변화가 생길 때 혹은 값의 변화가 있을 때 어떻게 처리할까요?

-> View의 변화의 경우 Delegate와 DataSource를 사용하여 이러한 문제를 해결합니다. (다들 UITableView나 UICollectionView등을 사용하면서 outlet을 ViewController에 연결하고 delegate와 DataSource를 Viewcontoller에 위임해 왔었죠??) delegate의 경우 사용자의 입력 터치 등등의 이벤트가 발생했을 때 Controller가 그 이벤트를 처리하기 때문에 View가 직접적으로 Controller에 접근할 필요가 없게 됩니다.

 

Model 역시 값의 변화를 Controller에 직접 전달하지 않고 Notification 혹은 KVO를 사용하여 Controller가 감지하여 처리할 수 있도록 합니다.  

 

Notification이 궁금하다면? - daheenallwhite.github.io/ios/2019/10/13/Notification-Center/

 

all white cheat sheet-Dana's Swifty Log

Swift, iOS, programming, tech, 앱 개발

daheenallwhite.github.io

 

이렇게 MVC패턴을 사용하여 개발하면 각각 역할이 나눠져 있기 때문에 생산성이 올라가지만 그럼에도 iOS의 경우 View와 ViewController 간의 역할 분리가 완벽하지 않습니다.   Controller가  맡는 부분이 많기 때문에 (ex. 뷰의 생명주기 등..) Controller가 커지는 것이죠. 그래서 MVC 이외에도 다양한 디자인 패턴들이 나오게 됩니다. (mvvm, viper 등등..)

 

이러한 내용을 정리해보면..!   MVC의 장단점은 다음과 같습니다.

 

장점: 생산성이 높다. (역할을 분담하여 빠르게 구현)

단점: 많은 코드들이 Controller에 집중되어 Controller가 커지게 된다. (Massive ViewController)  

 

이를 살펴보기 위해 아주 간단한 예제 코드를 만들어 봤습니다.

 

 

위에 보시는 것처럼 UILabel, UITextField 등이 View입니다. UILabel은 UIView를 상속받고 있고 UITextField의 경우 UIControl을 상속받지만 UIControl 역시 UIView를 상속받기 때문에, 결국 우리가 코드로 작성하는 뷰나 스토리보드를 통해 만드는 뷰들이 MVC에서 V에 해당하는 View입니다.

 

Controller의 경우 우리가 흔히 쓰는 ~~~Controller가 여기에 해당하고요! 지금은 코드가 몇 줄 안되지만, 뷰의 생명주기나 다양한 로직을 Controller에 작성해야 하기 때문에 필연적으로 Controller가 해비 해지게 됩니다. 

 

마지막으로, User의 경우 Model에 해당하는 부분으로, 지금은 단순히 email과 passwd 두 개의 저장 프로퍼티만 존재 하지만, 여기에 데이터에 관한 로직이 들어갈 수 있습니다.

 

다음 포스팅으로는 mvc패턴의 단점을 보완할 수 있는 mvvm 패턴에 대해 알아보겠습니다. 

 

참고)

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

gist.github.com/LeoHeo/1a46cea940bb2892a490f6b9d31bad07

 

swift mvc

swift mvc. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

blog.naver.com/PostView.nhn?blogId=jdub7138&logNo=220937372865&redirect=Dlog&widgetTypeCall=true

 

[iOS Swift] 객체간 소통 - Callback, Notification, Delegation

iOS에서 객체들끼리 교신하는 대표적인 방법으로는 Callback, Notification, Delegation 이렇게 3가지...

blog.naver.com

 

댓글
링크
최근에 올라온 글
최근에 달린 댓글