나만의 공부 노트

2강 정리 본문

(2017) 스탠포드 강의

2강 정리

va95 2021. 2. 16. 20:15

학습 내용

 

세가지 캠프

 

1. Model

앱이 무엇인지에 대해 관심을 가집니다.

UI 독립되어 있습니다.

 

2. Controller

어떻게 화면에 표시할 것인지에 대해 관심을 가집니다.

 

3. View

UIButton, UIViewController, UILabel와 같은 UI와 관련된 것이고 Controller의 통제를 받게 됩니다.


서로의 관계

Model과 Controller

Controller는 모델에 직접적으로 접근할 수 있지만, Model은 Controller에 Notification & KVO 방식을 통해

모델의 변화를 알립니다.

 

Model과 View

Model은 UI에 독립적이며 View와 소통할 수 없으며, View 또한 불가능합니다.

 

View와 Controller

Controller는 View에 대해 outlet을 이용해 View에게 직접적으로 접근할 수 있습니다. =

View는 Controller에게 구조적으로 미리 정해진 방식으로 Controller에게 행위에 대한 요청(delegate)

데이터에 대한 요청(data source)을 할 수 있습니다. 뿐만 아니라, action(View) - target(controller)의 구조로

사용자의 행위에 따라 필요한 함수를 호출할 수도 있습니다.

 

아래와 같은 MVC 패턴이 여러개 모여 하나의 앱을 만들게 됩니다.


 

MVC의 구조

앱을 구성할 때, 컨트롤러의 뷰에 다시 컨트롤러를 담는식으로 구성이 됩니다.

뷰는 일반적으로 컨트롤러의 구조를 알지 못한다고 가정하고 구현합니다. (즉 구조화=그룹화를 잘 수행해야합니다.)

이러한 전제조건 때문에 컨트롤러가 다른 컨트롤러에 직접적으로 개입하는 구조 또한 지양해야합니다.

그렇지 않다면 코드의 복잡도가 높아지고, 유지보수가 매우 힘들어집니다.(왜 MVC라는 구조를 써가면서 코드를 구현하는지 생각해봅시다.)

 

 

구조체

구조체는 상속이 없습니다.

구조체는 값타입이고, 클래스는 참조타입이라는 것입니다.

값타입은 사용하게 될때 복사되게 됩니다.

값이 계속 복사 된다면 불필요한 리소스가 사용된다고 생각 할 수도 있지만

스위프트는 영리하게도 모두 복사하는 것이 아니라 누군가가 값을 변경했을 때, 복사하게 됩니다.

이를 ‘쓰기 시 복사’ 전달 체계라고 합니다.

 

배열

- Array<T>(unsafeUninitializedCapacity: <Int>, initializingWith: <(inout UnsafeMutableBufferPointer<Int>, inout Int) throws -> Void 함수를 통해 미리 크기를 할당하고 배열을 사용할 수 있습니다.(배열 재할당을 방지하기 위해 사용합니다.)

- append를 사용하면 2의 지수승으로 배열의 크기를 재할당합니다.(= capacity)

    예를 들어, 4개를 가지고 있는 배열에 append를 하면 크기가 8인 배열을 만들고 값을 옮깁니다.

- 원소를 삭제하면 capacity는 유지합니다.

 

Lazy 키워드

O : 저장 프로퍼티, 기본적으로 struct, class에서만 사용

X : 계산 프로퍼티와 let으로 사용 불가

바로 초기화를 하지 않으며, 사용이 되기 시작할 때 초기화를 진행합니다.

보통 struct나 class가 초기화 될 때, 다른 인스턴스와 메서드에 접근이 불가하기 때문에 사용합니다.

특히 클로저를 이용한 초기화를 많이 사용하는데, 클로저 안에서는 self로 접근이 가능합니다.(모든 초기화가 끝나면 self로 접근이 가능해지기 때문입니다.) 

다만, lazy 키워드는 didSet을 사용할 수 없습니다. (observer를 사용할 수 없습니다. swift의 문법 특징인 것 같습니다)

 

Xcode 주석

MARK(표시할 부분), FIXME(고칠 부분), TODO(해야할 부분)으로 구분지어 줄 수 있습니다.

추가로 - 기호를 사용하면 Xcode에서 주석을 찾을 때 구분선 효과를 줄 수 있습니다.

 

랜덤

전역 함수로 arc4random() -> UInt32, arc4random_uniform(UInt32) -> UInt32, drand48() -> Double가 있습니다.

drand48()함수는 0.0~1.0 사이의 값을 리턴합니다.

또는 Int, Double과 같은 타입들은 타입 함수로 random 함수가 구현되어 있기 때문에 이것을 사용해도 됩니다.

 

값, 참조 타입

struct, enum은 값 타입입니다.

class는 참조 타입입니다.

'(2017) 스탠포드 강의' 카테고리의 다른 글

4강 정리  (0) 2021.02.17
3강 정리  (0) 2021.02.17
FS1강 정리  (0) 2021.02.17
1강 정리  (0) 2021.02.16
강의 정보  (0) 2021.02.16