[SwiftUI] ObservableObject 프로토콜
Updated:
ObservableObjects 프로토콜
앞선 포스팅에서 MVVM 패턴에 대해 다루었다. MVVM 패턴에서 View 와 ModelView가 상호 액션을 취할때 어떤 방식으로 이루어지는지는 설명하지 않았는데 이곳에서 하고자 한다.
ObservableObject 프로토콜이란
ObservableObject를 해석하여 힌트를 얻어보자. “관찰가능한 오브젝트”. 말그대로 관찰이 가능한 오브젝트라는 뜻이며 이 프로토콜을 따르는 클래스나 구조체는 외부에서 관찰될 수 있는 형태를 갖추게 된다. ObservableObject 프로토콜을 따르고 내부에 @Published 래퍼 프로퍼티를 선언한다. 이로써 ExampleViewModel은 ‘게시자’가 되었다. 즉 MVVM의 ViewModel은 게시자이다.
import SwiftUI
class ExampleViewModel: ObservableObject {
@Published var user: User
init() {
self.user = User(userName: "ronick", fullName: "Ronick Kim", age: 19)
}
func getOlder() {
self.user.age = self.user.age + 1
}
}
이제 이 게시자를 구독하면 되는데 이 구독자의 역할을 MVVM 에서 View가 담당하게 된다. View는 ViewModel이 게시자로서 게시(@Publised)하고 있는 user 프로퍼티의 값을 항상 관찰(observe)하고 있다가 그 값이 변경되면 즉시 구독알림을 받게되고 뷰의 랜더링을 다시 하게 된다.
import SwiftUI
struct ExampleView: View {
@ObservedObject var viewModel = ExampleViewModel()
var body: some View {
Button(action: { viewModel.getOlder() }, label: {
Text("\(viewModel.user.age)")
.frame(width: 120, height: 60)
.foregroundColor(.white)
.background(Color.blue)
})
}
}
Leave a comment