IOS개발: SWIFT/8. 심화 주제 및 추가 학습

SwiftUI의 Property Wrapper: @State, @Binding, @ObservedObject

_Blue_Sky_ 2024. 9. 19. 14:57
728x90
728x90

SwiftUI에서 상태 관리를 효과적으로 수행하기 위해 필수적으로 알아야 할 것이 바로 Property Wrapper입니다. @State, @Binding, @ObservedObject는 SwiftUI에서 상태를 관리하는 가장 기본적이면서도 강력한 도구입니다. 각각의 특징과 사용법을 자세히 알아보고, 어떤 상황에서 어떤 Property Wrapper를 사용해야 하는지에 대해 살펴보겠습니다.

1. @State: 뷰 내부 상태 관리

  • 용도: 뷰 내부에서만 사용되는 상태를 관리할 때 사용합니다. 예를 들어, TextField의 입력값, Toggle의 on/off 상태 등 뷰의 특정 부분에만 영향을 미치는 상태를 관리하는 데 적합합니다.
  • 특징:
    • 상태 변경 시 View가 자동으로 재렌더링됩니다.
    • 해당 View 내부에서만 사용 가능합니다.
    • 값 타입(Struct, Enum)만 사용 가능합니다.
  • 예시:
struct ContentView: View {
    @State private var name = ""

    var body: some View {
        TextField("이름을 입력하세요", text: $name)
        Text("안녕하세요, \(name)!")
    }
}
 

2. @Binding: 부모-자식 뷰 간 상태 공유

  • 용도: 부모 뷰에서 선언된 상태를 자식 뷰에서 변경하고, 그 변경된 값이 부모 뷰에도 반영되도록 할 때 사용합니다.
  • 특징:
    • 부모 뷰의 상태를 참조하고 수정할 수 있습니다.
    • 자식 뷰에서 상태를 변경하면 부모 뷰의 상태도 함께 변경됩니다.
    • 부모 뷰에서 @State로 선언된 프로퍼티를 $기호를 사용하여 Binding으로 만들어 자식 뷰에 전달합니다.
  • 예시:
struct ParentView: View {
    @State private var count = 0

    var body: some View {
        ChildView(count: $count)
    }
}

struct ChildView: View {
    @Binding var count: Int

    var body: some View {
        Button("카운트 증가") {
            count += 1
        }
    }
}
 

3. @ObservedObject: ObservableObject 프로토콜을 따르는 객체 관찰

  • 용도: 복잡한 데이터 모델이나 네트워크 통신을 통해 데이터를 가져올 때 사용합니다. ObservableObject 프로토콜을 따르는 객체를 생성하여 데이터를 관리하고, @Published 프로퍼티를 사용하여 상태 변경을 알립니다.
  • 특징:
    • ObservableObject 프로토콜을 따르는 객체를 관찰하여 상태 변경 시 View를 재렌더링합니다.
    • 큰 규모의 데이터를 관리하거나, 비동기 처리가 필요한 경우에 유용합니다.
  • 예시:
class User: ObservableObject {
    @Published var name = ""
    @Published var age = 0
}

struct ContentView: View {
    @ObservedObject var user = User()

    var body: some View {
        Text("이름: \(user.name), 나이: \(user.age)")
    }
}
 

각 Property Wrapper 선택 가이드

  • @State: 뷰 내부의 간단한 상태 관리에 적합
  • @Binding: 부모-자식 뷰 간 상태 공유가 필요할 때
  • @ObservedObject: 복잡한 데이터 모델이나 네트워크 통신을 통해 데이터를 관리할 때

결론

SwiftUI의 Property Wrapper는 뷰의 상태를 효과적으로 관리하고, 복잡한 UI 로직을 간결하게 구현하는 데 큰 도움을 줍니다. 각 Property Wrapper의 특징과 사용법을 잘 이해하고, 적절한 상황에 맞게 사용하여 더욱 효율적인 SwiftUI 개발을 할 수 있습니다.

주의:

  • @StateObject, @EnvironmentObject 등 다른 Property Wrapper도 있지만, 본 설명에서는 가장 기본적인 세 가지에 대해 집중적으로 다루었습니다.
  • Property Wrapper는 SwiftUI의 핵심 개념이므로 꾸준히 학습하고 실제 프로젝트에 적용하여 실력을 향상시키는 것이 중요합니다.
728x90
728x90