value type과 protocol을 사용해서 앱을 개선하는 방법.
Local Reasoning → 코드 앞에 놓인 특정 함수가 다른 코드와 어떻게 상호작용하는지를 굳이 생각하지 않아도 되는 상태를 의미
예를 들어, 새로운 팀에 합류했을 때 수많은 코드를 살펴봐야 하는 상황인데, 정작 맥락은 거의 없는 경우 가정. 이런 상황에서 개별 함수가 무엇을 하는지 이해할 수 있어야 함.
이는 매우 중요한 능력. 코드가 더 쉽게 유지 보수되고, 작성되며, 테스트하기 쉬워질 뿐 아니라, 처음 작성하는 과정에서도 편리함을 제공.
UIKit 앱에서 Local Reasoning이 어떻게 향상될 수 있는지 모델-뷰-컨트롤러(MVC) 설계 패러다임의 맥락에서 이야기.
Cocoa는 이 패러다임을 사용하며, 여기서 모델(Model)은 데이터를 저장하고, 뷰(View)는 데이터를 보여주며, 컨트롤러(Controller)는 이 둘을 조정.

앱을 실행하면, 우리가 꾼 꿈 목록이 바로 표시.

꿈 항목 중 하나를 탭하면 해당 꿈을 편집 가능.
상단에는 미리보기가 표시되고, 아래로 스크롤하여 레이저 포커스(Laser Focus), 비(Rain)와 같은 효과를 추가할 수 있음.

다시 스크롤을 올려보면, 유니콘 꿈의 미리보기에 레이저 포커스, 비, 불을 내뿜는 효과가 추가된 것을 확인 가능.
꿈 편집이 끝나면 꿈 목록으로 돌아감.
모델 계층에서 값 타입(Value Types)의 이점에 대해 빠르게 복습. (작년에 이미 다룬 주제이기 때문에 간단히 넘어갈 예정)
뷰와 컨트롤러 계층에서 값 타입을 어떻게 활용할 수 있는지에 초점을 맞춤. → 많은 사람이 이 계층에서 값 타입을 활용할 수 있다고 생각하지 않지만, 실제로는 명확한 장점 존재.
값 타입과 프로토콜을 사용해 테스트 가능한 코드를 만드는 방법을 소개.

Dream은 앱에서 꿈 항목을 나타내는 모델 타입
class Dream {
var description: String
var creature: Creature
var effects: Set<Effect>
...
}