데이터와 로직을 담은 Model
은 독립적으로 존재하는데, 이를 viewModel
이 View
와 연결해줌으로써 View
는 모델의 현재 상태를 디스플레이한다
viewModel
에는 사용자의 의도를 보여주는 함수들이 있는데, 사용자가 인터페이스와 특정한 의도를 갖고 상호작용하면 View
는 viewModel
에게 사용자 의도를 반영하라고 요구하고, viewModel
은 Model
이 의도에 따라 상태를 변화시킬 수 있도록 해당 상황에 맞는 intent function
을 호출한다. 의도가 반영되어 Model
이 바뀌면 viewModel
은 이를 감지해 변화가 생겼음을 publish
하고 이를 확인한 View
는 그때마다 body
를 다시 빌드해 인터페이스를 갱신한다!
viewModel
이Model
의 변화를 감지할 수 있는 이유는swift
는 구조체에 변화가 생길 때 이를 감지할 수 있는데Model
이 구조체이기 때문!
해당 프로토콜을 따르게 함으로써 ViewModel
이 세상에 Model
이 바뀌었음을 publish
할 수 있도록 한다
해당 프로토콜에 순응하는 경우 자동으로 objectWillChange
프로퍼티를 갖게 되는 데 여기에 send 메서드
를 이용해 publish
한다
혹은 Model
앞에 @Published 래퍼를 선언해 publish
할 수 있다
class EmojiMemoryGame: ObservableObject {
...
@Published private var model = createMemoryGame()
...
}
viewModel
이 변화를 publish
하면 View
로 하여금 body
전체를 다시 빌드하도록 하는 역할을 담당struct ContentView: View {
@ObservedObject var viewModel: EmojiMemoryGame
var body: some View {
...
}
}
MVVM
이 어떤 흐름으로 작동하는지는 얼추 알 것 같다...이번주 과제까지 하면 좀 더 잘 이해할 수 있을 것 같다...제발!