CS193P

[iOS] 스탠포드 CS193P 2강

Beck 2021. 8. 15. 20:55

 

MVC - Object-Oriented Design Pattern

MVC란?

  • 모델 : 앱에서 '무엇'에 해당한다.
  • 컨트롤러: "어떻게"에 해당한다
  • 뷰: Your Controller's minions (컨트롤러의 하인이다.)

Controller 👉  Model, View

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

모델은 직접 컨트롤러와 얘기할 수 없다. 하지만 NotificationKVO(Key value observing)를 활용해서 Controller가 모델의 값이 변경되는 것을 감지할 수 있다고 한다.

MVC의 전체적인 구조

 

한 뷰는 한 MVC로 제어한다.

보통의 앱은 많은 MVC를 갖고 있다고 한다. 어떤 MVC는 다른 MVC의 뷰가 될 수 있다. 하지만 강의에서 아래처럼은 복잡한 MVC 구조를 갖는 것을 다루지는 않을 것이라고 한다.

뷰는 다른 MVC를 sub view로 가질 수 있다

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_