MVC 디자인 패턴에 대한 강의를 듣고 정리를 해보겠습니다!
MVC 디자인 패턴.. 맨날 맨날 듣지만 뭔지 정확히 몰랐는데
아래 요 강의 듣고 정리해보는 시간을 갖겠습니다..
https://www.youtube.com/watch?v=zazVxjuEXok
MVC 디자인 패턴이란?
- 세 개의 다른 캠프로 앱 또는 소스코드로 나누는 방법 (Model / View / Controller)
Model
- 앱이 무엇을 하는지 (화면에 어떻게 그려지는가와는 관계없음)
즉, 그냥 무엇인지
(ex.계산기 : 계산을 하는 부분)
즉, 동작 알고리즘에 가깝다고 생각하면 됨.
Controller
- Model이 스크린에 어떻게 표현될 것인지
기본적으로, 모든 컨트롤러에 들어가는 UI logic
View
- Controller의 하위 종속자
Controller가 Model에 들어있는 버튼 등을 화면에 보여주기 위해 필요한 것들
사용자에게 입력을 받아 Model을 업데이트하기도 함
중요한 것은, Model, View, Controller 간의 소통이다
노란 선 -> 건널 수 없음.
흰 선 -> 건널 수 있지만 조심해서 건너야 함.
흰 점선 -> 자유롭게 넘나들 수 있음.
강의 영상에서 이렇게 선을 그어서 편하게 정리해줬네요., 굿
Controller 관점
1. Controller -> Model에게
Controller는 Model에게 언제든 얘기를 할 수 있다.
Model의 모든 것을 알고 있고, 보내고 싶은 메세지를 보낼 수도 있다.
즉, Controller는 Model을 완전 통제함
2. Controller -> View에게
outlet을 통해 연결이 이루어짐
-> 즉, Controller의 역할
-사용자에게 모델에 있는 것을 표현
-사용자로부터 정보를 받아 모델을 업데이트
즉, Controller는 모든 것을 통제하고, 각각 무엇을 해야할지를 알고있음.
Model과 View는 독립적이어서 둘 간의 직접적인 소통 불가능.
Model과 View는 직접 소통을 할 일도 없을 뿐더러, Controller를 통해야 함.
View 관점
1. View가 Controller에게
-> 뷰의 구성은 모두 일반화된 객체(UIButton, UILabel처럼)이므로,
View와 Controller 간의 소통은 제한적임.
하지만 얘기를 해야하긴 함.
그래서 눈에 보이지 않고 구조화 되어야 한다. (View는 Controller에 대해 모르기 때문에)
그럼, 구조화 방식은?
1. target-action (@IBAction)
2. Delegate (scroll view처럼, 그냥 단순 터치가 아닌 복잡한 소통을 할 때도 있음. Controller는 이를 알고 반응해야함.
또한, view들이 controller에게 허락을 받기도 함. (should, will, did같은 함수들))
2.View가 Model에게
불가능
+ MVC 특징
View는 자신이 보여주고 있는 Data 소유할 수 없고, Controller에게 매번 물어봄.
Controller가 그럼 Model에서 Data를 가져옴.
그러므로, Controller는 View와 Model 사이의 번역기
Model 관점
1. Model이 Controller에게
불가능.
만약, UI와는 상관 없는 모델이 값이 바뀌는 데이터를 가지고 있다면?
그럼 Model은 Controller에게 어떻게 알려줌?
값이 바뀌는 일이 생길 때 마다 방송을 하면, Controller가 채널을 맞춰둔 방송을 보고 알아서 데이터가 있고, 데이터가 변경되었는지 알 뿐, Model이 직접 알려주진 않음.
2. Model이 View에게
절대 불가능
일반적으로, iOS에서는 하나의 MVC가 화면 하나를 제어
아이패드는 2~3개의 화면을 제어
즉, MVC는 앱의 작은 한 부분을 제어함.
-> 큰 앱을 만들기 위해서는 여러 MVC를 만들어 결합해야 함.
MVC를 다른 MVC의 View의 일부로 생각해야함.
(ex. 탭바는 탭바 갯수 만큼의 MVC를 가지고 탭을 누를 때마다 다른 MVC를 볼 수 있다.)
탭이 3개인 앱은 TabBarController + 3개의 탭에 각각 해당하는 것들 -> 4개의 MVC를 가진다.
탭에 해당하는 MVC들은 각각 완전히 독립함.
'iOS' 카테고리의 다른 글
[iOS/Swift] UIView, UILabel에 그라데이션 색깔 적용 Extension (0) | 2022.03.14 |
---|---|
[iOS/Swift] ViewController Life Cycle (뷰의 생명주기) (3) | 2022.02.20 |
[iOS/Swift] 프로젝트에 탭바(TabBar) 만들기 (코드로) (1) | 2022.02.14 |
[iOS/Swift] 프로젝트에 탭바(TabBar) 만들기 (다른 스토리보드) (0) | 2022.02.14 |
[iOS/Swift] 프로젝트에 탭바(TabBar) 만들기 (같은 스토리보드) (0) | 2022.02.14 |