[iOS] 스탠포드 CS193P 2강
MVC - Object-Oriented Design Pattern
MVC란?
- 모델 : 앱에서 '무엇'에 해당한다.
- 컨트롤러: "어떻게"에 해당한다
- 뷰: Your Controller's minions (컨트롤러의 하인이다.)
Controller 👉 Model, View
Controllers can alaways talk directly to their Model.
컨트롤러는 모델과 직접 소통한다.
Controllers can also talk directly to their View.
컨트롤러는 거의 한 번에 모두와 얘기할 수 있다.
Model 👈👉 View ?
The Model and View should never speak to each other.
모델은 뷰와 독립적이다.
👉 절대 뷰와 모델은 서로 소통하지 않는다.
View 👉 Controller
뷰는 target을 설정해두고 action으로 Controller에게 말한다.
이 외에 뷰에서 일어나는 이벤트들을 delegate을 통해 Controller에게 전달할 수도 있다.
The Controller sets itself as the View's delegate.
The delegate is set via protocol
화면은 인스턴스 변수를 갖고 있지 않는다. 👉 대신 Data source를 통해 Controller의 변수를 가져온다
Controllers are almost always that data source(not Model!) (다시 시청)
Model 👉 Controller
모델은 직접 컨트롤러와 얘기할 수 없다. 하지만 Notification과 KVO(Key value observing)를 활용해서 Controller가 모델의 값이 변경되는 것을 감지할 수 있다고 한다.
한 뷰는 한 MVC로 제어한다.
보통의 앱은 많은 MVC를 갖고 있다고 한다. 어떤 MVC는 다른 MVC의 뷰가 될 수 있다. 하지만 강의에서 아래처럼은 복잡한 MVC 구조를 갖는 것을 다루지는 않을 것이라고 한다.
Demo
데모에서는 이전 강의에서 만든 Concentration(카드 뒤집기) 게임을 MVC 패턴으로 만드는 것을 보여주셨다.
Card 구조체, Concentration 클래스를 만들면서 아래의 개념들을 짚어줬다.
- 구조체와 클래스의 차이
- value 타입과 reference 타입
- 구조체, 클래스의 생성자
- static 변수, 함수
- lazy variable
- dictionary
- coutable range ( 0..<10, 0...10 )
- optional 처리하는 방법
이 개념들은 추후 다른 글에서 정리해보려고 한다.
관련 링크
유튜브 영상: https://youtu.be/gI3pz7eFgfo?list=PL3d_SFOiG7_8ofjyKzX6Nl1wZehbdiZC_