적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/Swift 튜토리얼

[Stanford iOS] Lecture 2. MVVM and the Swift Type System

hongssup_ 2021. 3. 31. 10:44
반응형

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 
(except View which is a protocol)

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)

따로 선언하지 않고 함수를 바로 인자로 사용하여 함수를 구현하는 것. 

 

 

 

 

 

728x90
반응형