안녕하세요! 피피아노입니다 🎵
이번 포스팅에서는 ObservedObject에 대해서 포스팅을 해보려고 합니다!
그럼 바로 시작하겠습니다.
ObservedObject란?
ObservedObject가 무엇인지 알아보기 위해서 먼저 애플 공식 문서를 먼저 확인해보겠습니다.
https://developer.apple.com/documentation/swiftui/observedobject
'A property wrapper type that subscribes to an observable object and invalidates a view whenever the observable object changes.'
'관찰 가능한 객체를 구독하고 관찰 가능한 객체가 변경될 때마다 뷰를 무효화하는 속성 래퍼 유형입니다.'
@propertyWrapper @frozen
struct ObservedObject<ObjectType> where ObjectType : ObservableObject
한국말로 해석해도 무슨 말인지 이해가 안 가기 때문에 좀 더 쉽게 정리를 해보겠습니다..!
@ObservedObject는 SwiftUI에서 데이터가 변경될 때 뷰를 업데이트하기 위해 사용하는 프로퍼티 래퍼입니다. 주로 외부에서 제공되는 데이터 모델을 관찰하고, 해당 데이터가 변경될 때 뷰를 자동으로 다시 렌더링하도록 합니다. @ObservedObject를 사용하면 뷰와 데이터 모델 간의 의존성을 효과적으로 관리할 수 있습니다.
이렇게만 정리하면 한 번에 이해하기 조금 어려울 수도 있으니까 더 쉽게 풀어서 정리를 해보겠습니다!
SwiftUI에서 @ObservedObject는 데이터가 바뀌면 화면을 자동으로 새로 그려주는 역할을 하는 도구라고 생각하면 됩니다.
만약 여러분이 앱에서 사용자의 입력이나 서버에서 받아온 정보 같은 외부 데이터를 화면에 보여주고 싶다면, 그 데이터가 변할 때마다 화면도 업데이트 해야겠죠. @ObservedObject를 사용하면, 이런 외부 데이터의 변화를 감지하고, 데이터가 바뀔 때마다 화면을 자동으로 다시 그려줍니다.
간단하게 말해서, @ObservedObject는 화면을 최신 상태로 유지시켜주는 도구라고 이해하면 되겠죠?
ObservedObject의 사용 방법
@ObservedObject를 사용하려면 먼저 관찰할 객체가 ObservableObject 프로토콜을 준수해야 합니다. ObservableObject 프로토콜은 객체의 변경 사항을 알리기 위해 @Published 프로퍼티 래퍼와 함께 사용됩니다.
1. ObservableObject 클래스 정의
import SwiftUI
import Combine
class Counter: ObservableObject {
@Published var count: Int = 0
func increment() {
count += 1
}
}
여기서 Counter 클래스는 ObservableObject 프로토콜을 준수하며, count 프로퍼티가 변경될 때마다 이를 알리기 위해 @Published로 선언되었습니다.
2. @ObservedObject를 사용한 뷰 정의
struct CounterView: View {
@ObservedObject var counter: Counter
var body: some View {
VStack {
Text("Count: \(counter.count)")
Button(action: {
counter.increment()
}) {
Text("Increment")
}
}
}
}
CounterView 구조체는 Counter 객체를 @ObservedObject로 선언하고, counter 객체의 상태가 변경될 때마다 뷰를 업데이트합니다.
3. 부모 뷰에서 객체 전달
struct ContentView: View {
@StateObject private var counter = Counter()
var body: some View {
CounterView(counter: counter)
}
}
ContentView에서는 @StateObject를 사용하여 Counter 객체를 생성하고, 이를 CounterView에 전달합니다. @StateObject는 뷰의 생명주기 동안 객체를 유지하며, 뷰가 다시 생성될 때도 동일한 객체를 사용합니다.
@ObservedObject와 다른 프로퍼티 래퍼 비교
- @State: 뷰 내부에서 상태를 관리할 때 사용합니다. 주로 간단한 상태를 관리하는 데 적합합니다.
- @StateObject: 뷰의 생명주기에 걸쳐 객체를 관리할 때 사용합니다. 뷰가 다시 생성될 때도 동일한 객체를 유지합니다.
- @ObservedObject: 외부에서 전달된 객체를 관찰할 때 사용합니다. 객체의 상태가 변경될 때마다 뷰를 업데이트합니다.
- @EnvironmentObject: 환경 전역에서 공유되는 객체를 사용할 때 사용합니다. 주로 앱 전체에서 공통적으로 사용되는 데이터를 관리합니다.
일단 이렇게 간단하게 정리 했는데 기회가 된다면 다른 프로퍼티 래퍼도 더 자세하게 정리해보겠습니다..!!!
감사합니다.
잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!
궁금하신 부분은 댓글로 질문 부탁드립니다!
'Apple > SwiftUI' 카테고리의 다른 글
[SwiftUI] AVFoundation 톺아보기 (2) | 2024.07.15 |
---|---|
[SwiftUI] Core Data를 사용해보자 (0) | 2024.07.07 |
[SwiftUI] @State란 무엇일까? (2) | 2024.05.27 |
[SwiftUI] List 동적 리스트로 구현하기 (2) | 2024.05.15 |
[SwiftUI] List에 대한 기본기 이해하기 (0) | 2024.05.06 |