Jupyo's Daily Story
@ObservedObject 본문
728x90
반응형
@ObservedObject는 외부에서 전달된 객체를 감시하고, 해당 객체의 상태가 변경될 때 자동으로 UI를 업데이트하는 데 사용되는 SwiftUI의 중요한 프로퍼티 래퍼입니다. ObservableObject와 함께 사용되며, 클래스 기반 상태를 감시할 때 필수적인 역할을 합니다.
ObservedObject란?
- ObservedObject는 SwiftUI에서 외부에서 전달받은 ObservableObject를 감시하는 프로퍼티 래퍼입니다.
- 뷰가 외부 객체의 상태를 감시하고, 객체의 데이터가 변경될 때 자동으로 UI가 업데이트됩니다.
- 뷰가 객체를 생성하지 않고, 외부에서 전달받아 감시하는 상황에서 사용됩니다.
사용 이유
- 외부 객체의 상태를 감시하고, 해당 상태가 변할 때 자동으로 UI를 갱신하기 위해 사용합니다.
- 객체의 상태가 다른 뷰에서도 공유되거나 다른 곳에서 생성된 데이터가 변경될 때 반영됩니다.
사용 예시
class CounterViewModel: ObservableObject {
@Published var count: Int = 0
func increment() {
count += 1
}
}
struct ContentView: View {
@ObservedObject var viewModel: CounterViewModel
var body: some View {
VStack {
Text("Count: \(viewModel.count)")
.padding()
Button("Increment") {
viewModel.increment()
}
}
}
}
- CounterViewModel: @Published 프로퍼티로 count를 선언하고, 값이 변경될 때 자동으로 감지됩니다.
- ContentView: @ObservedObject로 외부에서 전달된 viewModel의 상태를 감시합니다. 버튼을 누르면 count가 증가하고 UI가 업데이트됩니다.
@StateObject와의 차이
- @ObservedObject는 외부에서 전달된 객체를 감시할 때 사용합니다.
- @StateObject는 뷰가 직접 객체를 생성하고, 그 객체의 상태를 관리할 때 사용합니다.
프로퍼티 래퍼 | 역할 | 객체 생성 및 소유 |
@StateObject | 뷰에서 직접 객체를 생성하고 관리 | 뷰가 객체를 소유 |
@ObservedObject | 외부에서 전달된 객체를 감시 | 객체는 외부에서 관리 |
데이터 흐름 관리
- @ObservedObject를 사용하면 데이터가 여러 뷰에서 공유되거나 외부에서 변경된 데이터가 뷰에 반영됩니다.
- 여러 뷰에서 같은 객체를 사용하여 동일한 상태를 감시하고 일관성 있는 데이터 흐름을 유지할 수 있습니다.
메모리 관리
- @ObservedObject는 객체를 직접 소유하지 않고 외부에서 전달된 객체를 감시합니다.
- 객체의 수명 주기는 외부에서 관리되며, 뷰가 해제되더라도 객체는 남아 있을 수 있습니다.
- 메모리 관리가 더 유연하게 이루어집니다.
ObservableObject와의 관계
@ObservedObject는 ObservableObject와 함께 사용됩니다. ObservableObject는 데이터의 상태 변화를 감지하는 프로토콜로, 해당 데이터를 감시하는 뷰는 @ObservedObject를 통해 자동으로 상태 변화를 감지하고 UI를 업데이트합니다.
다른 뷰에서 상태 공유하기
@ObservedObject를 사용하면 한 객체를 여러 뷰에서 공유할 수 있습니다. 예를 들어, 아래 코드는 두 개의 뷰에서 같은 ViewModel을 감시하는 예시입니다.
struct ParentView: View {
@StateObject var viewModel = CounterViewModel()
var body: some View {
VStack {
ContentView(viewModel: viewModel)
AnotherView(viewModel: viewModel)
}
}
}
struct AnotherView: View {
@ObservedObject var viewModel: CounterViewModel
var body: some View {
Text("Another count: \(viewModel.count)")
}
}
- ParentView에서 @StateObject로 viewModel을 생성합니다.
- ContentView와 AnotherView는 @ObservedObject로 이 객체를 감시하며, 동일한 데이터를 표시하고 업데이트합니다.
결론
- @ObservedObject는 외부에서 전달된 객체의 상태를 감시하고 자동으로 UI를 업데이트하는 데 사용됩니다.
- 외부 객체의 상태가 여러 뷰에서 공유될 때 사용되며, 데이터 변경이 자동으로 반영됩니다.
- @StateObject와는 달리 객체의 소유권을 갖지 않으며, 외부에서 전달된 데이터를 감시하는 역할을 합니다.
요약
- @ObservedObject는 외부에서 전달된 객체를 감시합니다.
- 객체의 상태가 변경될 때 UI가 자동으로 업데이트됩니다.
- ObservableObject와 함께 사용하여, 상태 변화를 감시하고 자동으로 UI를 갱신할 수 있습니다.
- @StateObject와 다르게 객체를 소유하지 않으며 외부에서 관리되는 객체를 감시합니다.
반응형
'SwiftUI' 카테고리의 다른 글
@Environment (0) | 2024.09.27 |
---|---|
@Published (0) | 2024.09.22 |
@Binding (2) | 2024.09.16 |
@StateObject (0) | 2020.10.15 |
ObservableObject (0) | 2020.10.15 |