# property wrapper ## ⭐️ property wrapper `@ObservedObject`, `@EnvironmentObject`, `@StateObject`은 SwiftUI에서 사용되는 property wrapper입니다. SwiftUI는 데이터와 뷰를 바인딩하여 상태 관리를 쉽게 만들어주는 프레임워크이며, 이러한 property wrappers는 데이터 흐름을 관리하고 뷰 간에 데이터를 공유하는데 사용됩니다. 이러한 property wrappers는 SwiftUI 앱에서 데이터 관리와 상태 업데이트를 단순화하고 뷰 간 데이터 전달을 효율적으로 처리하는 데 도움이 됩니다. ### 📌 @ObservedObject - `@ObservedObject`는 외부에서 생성된 ObservableObject를 사용하여 뷰 내에서 데이터를 관찰하는 데 사용됩니다. ObservableObject는 데이터 변경을 알리는 데 사용되며, 해당 데이터가 변경될 때 뷰를 업데이트합니다. 주로 외부 클래스나 모델 객체를 SwiftUI 뷰에 연결하는데 사용됩니다. ```swift class MyModel: ObservableObject { @Published var data: String = "" } struct MyView: View { @ObservedObject var model = MyModel() var body: some View { Text(model.data) } } ``` ### 📌 @EnvironmentObject - `@EnvironmentObject`는 환경(environment)에 저장된 데이터 객체를 가져와 뷰에서 사용하는 데 사용됩니다. 환경 객체는 여러 뷰에서 공유되며, 데이터를 중앙에서 관리하고 모든 하위 뷰에서 액세스할 수 있도록 합니다. ```swift class UserData: ObservableObject { @Published var username: String = "John" } struct ContentView: View { @EnvironmentObject var userData: UserData var body: some View { Text("Welcome, \(userData.username)!") } } ``` ### 📌 @StateObject - `@StateObject`는 뷰의 수명 주기와 관련된 객체를 생성하고 관리하는 데 사용됩니다. 주로 뷰 내에서 사용되는 데이터를 초기화하고 관리하는 데 유용합니다. 뷰가 소멸될 때 객체도 함께 해제됩니다. ```swift class MyViewModel: ObservableObject { @Published var count: Int = 0 } struct MyView: View { @StateObject var viewModel = MyViewModel() var body: some View { Text("Count: \(viewModel.count)") } } ```