Jupyo's Daily Story
ObservableObject 본문
728x90
반응형
ObservableObject는 SwiftUI에서 클래스 기반 데이터를 관리하고, 해당 데이터가 변경될 때 자동으로 UI를 업데이트하는 중요한 프로토콜입니다. ObservableObject를 사용하면 SwiftUI의 반응형 구조에서 데이터를 효율적으로 관리할 수 있습니다.
ObservableObject란?
- ObservableObject는 SwiftUI의 데이터 모델이 상태를 관리하고, 그 상태의 변화를 감시할 수 있게 해주는 프로토콜입니다.
- 데이터가 변경될 때 자동으로 UI가 업데이트되도록 하기 위해 사용됩니다.
- 보통 클래스 타입의 데이터 모델에서 사용되며, 이 모델을 감시하는 뷰가 자동으로 리렌더링됩니다.
사용 이유
- ObservableObject는 상태가 자주 변경되는 클래스 기반 데이터를 관리할 때 유용합니다.
- 이 프로토콜을 구현하면 데이터가 변경될 때 이를 감지하고 뷰를 업데이트할 수 있습니다.
- SwiftUI의 반응형 시스템을 활용하여, 복잡한 데이터 흐름도 쉽게 관리할 수 있습니다.
@Published와 함께 사용
ObservableObject와 함께 자주 사용되는 것이 @Published 프로퍼티 래퍼입니다. @Published는 해당 프로퍼티의 값이 변경될 때 자동으로 변경을 알리며, 이를 감시하는 뷰가 업데이트됩니다.
import SwiftUI
import Combine
class UserSettings: ObservableObject {
@Published var username: String = "Guest"
}
- @Published는 username이 변결될 때 자동으로 변경 사항을 알립니다.
- @ObservableObject나 @StateObject를 사용해 이 데이터를 감시하는 뷰가 자동으로 업데이트됩니다.
ObservableObject의 사용 예시
아래는 ObservableObject를 사용하는 기본적인 예시입니다.
import SwiftUI
import Combine
class CounterViewModel: ObservableObject {
@Published var count = 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을 감시하고, 버튼 클릭 시 카운터가 증가하며 UI가 자동으로 변경됩니다.
@ObservedObject와의 연관성
ObservableObject는 @ObservedObject와 함께 사용되며, 뷰에서 외부 객체를 감시하는 데 사용됩니다.
@ObservedObject는 외부에서 전달받은 객체의 상태를 감시하고, 해당 객체의 값이 변경될 때 자동으로 뷰를 업데이트합니다.
struct ContentView: View {
@ObservedObject var userSettings = UserSettings()
var body: some View {
VStack {
Text("Username: \(userSettings.username)")
Button("Change Username") {
userSettings.username = "NewUser"
}
}
}
}
- userSettings가 업데이트될 때 자동으로 Text 뷰가 새로 고침됩니다.
- @ObservedObject는 뷰가 객체의 상태를 감시하는 데 사용됩니다.
메모리 관리 및 성능
- 객체의 상태를 감시하면서 UI를 업데이트하기 때문에 반응형 시스템에서 중요한 역할을 합니다.
- ObservableObject와 @Published는 비동기적으로 데이터 변경을 감지하고 UI를 업데이트하므로, UI와 데이터의 일관성을 유지하는 데 도움이 됩니다.
- @StateObject와 함께 사용하면 객체의 생명 주기도 관리할 수 있습니다.
ObservableObject와 StateObject의 차이
프로퍼티 래퍼 | 역할 | 객체 관리 |
ObservableObject | 데이터 모델이 상태 변경을 알리도록 관리 | 외부에서 전달된 객체를 감시 |
@StateObject | 뷰가 객체를 직접 생성하고 소유 | 객체의 생명 주기를 뷰가 소유 |
결론
- ObservableObject는 SwiftUI에서 클래스 기반 데이터를 관리하고, 상태 변화에 따른 UI 업데이트를 자동으로 처리하는 핵심 도구입니다.
- @Published와 @ObservedObject와 함께 사용하며, 데이터가 변경될 때 자동으로 UI를 업데이트하는 시스템을 쉽게 구현할 수 있습니다.
요약
- ObservableObject는 클래스 기반 상태 관리를 위한 프로토콜입니다.
- 상태 변화가 발생할 때 UI가 자동으로 업데이트됩니다.
- @Published와 함께 사용하여, 값이 변경될 때 이를 자동으로 알림.
- 뷰에서 객체를 감시할 때는 @ObservedObject를 사용합니다.
반응형
'SwiftUI' 카테고리의 다른 글
@Binding (2) | 2024.09.16 |
---|---|
@StateObject (0) | 2020.10.15 |
@State (0) | 2020.10.15 |
@EnvironmentObject (0) | 2020.10.14 |
Spacing & Spacer (0) | 2020.10.13 |