---
# System prepended metadata

title: Untitled

---

# 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)")
       }
   }
   ```