Lecture 2. MVVM and the Swift Type System
<Architecture>
MVVM Design paradigm
‘code organizing’ architectural design paradigm
‘reactive’ user-interfaces concept
must be adhered for SwiftUI to work
cf) UIKit 프레임워크의 MVC 모델과의 차이?
모델이 뷰에 적용되기까지
data flows model to view (read only)
[View]
- Reflects the Model
- Stateless
- Declared : 함수 사용하지않고 그냥 바로 선언해줌 -> time independent (UI 작성 순서 없이 그냥 시간 상관없이 언제든지 작동, 구현)
- Reactive : 언제든지 model이 바뀌면 자동으로 바로 view update
[ViewModel]
binds view to model - model 바뀌면 view gets reflected
Interpreter : interpreting model for the view
모델이 sql database이거나 http 호출하는 서버에 있거나 하면 복잡. viewmodel이 view로 넘겨지는 모델의 데이터 구조를 좀더 간결하게 해준다.
뷰에서의 동작으로 모델을 바꾸고 싶을 땐?
ViewModel processes ‘Intent’ (of the user) : Model - View - Intent
view calls Intent function -> viewModel modifies the Model -> 다시 뷰에 적용
Varieties of Types
- struct
- class
- protocol
- generics (don't care type)
- enum
- functions
struct and class
struct | class |
value type | reference type |
copied when passed of assigned | passed around via pointers |
copy on write | automatically reference counted (automatic reference counting) |
Functional programming (basically built to support functional programming, focus on functionality 목적 기능 of things) |
Object-oriented programming ( cf. java, c++ ) (built for object oriented programming, focus on encapsulating the data and functionality into some container) |
no inheritance | inheritance (single) |
'Free' init initializes ALL vars | 'Free' init initializes NO vars |
Mutability must be explicitly stated | Always mutable |
Your 'go to' data structure | Used in specific circumstance |
우리가 자주 쓰는 것들에는 대부분 struct 형식이 많음. array, dictionaries, ints, bools, doubles 전부 struct |
ViewModel in MVVM is always a class : 왜냐면 ViewModel has to be shared amongst a lot of different Views and classes are great for sharing (UIKit is also class-based) |
mutability(changeability)
누구나 클래스의 포인터를 가지고 있으면? 내용을 변경할 수 있기 때문에 규모가 커질수록 어디서 뭐하는지? 어떻게 돌아가는지 파악하기 힘들다는 단점?
Generics (= Type Parameter)
type이 정해지지 않은 data structure를 다루고 싶은 경우가 있을 수 있다. (don't care about type)
하지만 Swift는 strongly-typed language라서 'untyped' 같은 변수는 가질 수 없다.
그럼 'don't care' type (= generics)은 어떻게 사용하나?
<don't care> type의 대표적인 예 : Array
배열 안의 값들의 타입은 Int, bool 등 뭐가 되던 상관없음.
Array의 declaration을 살펴보면
struct Array<Element> {
...
func append(_ element: Element) { ... }
}
여기서 'Element'는 don't care type으로, type이 뭐가 되든 append 함수는 상관을 안한다. 추후 타입이 정해지고 사용될 때까지 type의 placeholder 역할을 하는 것.
Functions
can declare a variable to be of type 'function'
includes types of arguments and return value 인자와 반환값을 가진다.
* Closures :
inlining a function (taking a function that you're passing to another function as a parameter)
따로 선언하지 않고 함수를 바로 인자로 사용하여 함수를 구현하는 것.
'Swift iOS 앱 개발 > Swift 튜토리얼' 카테고리의 다른 글
[Stanford iOS] Lecture 4. Grid + enum + Optionals (0) | 2021.04.05 |
---|---|
[Stanford iOS] Lecture 3. Reactive UI + Protocols + Layout (0) | 2021.04.01 |
[Stanford iOS] Lecture 1. SwiftUI를 만나다 (0) | 2021.03.30 |
6. Swift SceneKit Tutorial _3D 게임 만들기 (0) | 2020.12.24 |
5. 돈 없어도 서버를 만들 수 있는 세상! _Swift Firebase Tutorial for iOS (0) | 2020.12.15 |