[SwiftUI] 데이터 흐름: @Binding vs 단순 변수,상수
SwiftUI의 핵심 요소 중 하나는 데이터 흐름입니다.
뷰 간에 데이터를 전달하고 관리하는 방식은 앱의 성능과 유지보수성에 큰 영향을 미칩니다. 이 글에서는 NavigationLink나 자식 뷰에 매개변수를 전달할 때 사용되는 두 가지 방법, 즉 @Binding과 단순 변수 혹은 상수를 비교해 보겠습니다.
단순 변수 상수 전달
단순 변수는 값 타입으로, 이를 자식 뷰에 전달하면 복사본이 생성됩니다. 예를 들어, 문자열이나 숫자와 같은 기본 데이터 타입은 이 방법으로 전달하기 적합합니다.
struct ParentView: View {
var body: some View {
NavigationLink(destination: ChildView(text: "Hello World")) {
Text("Go to Child View")
}
}
}
struct ChildView: View {
var text: String
var body: some View {
Text(text)
}
}
이 경우, ChildView는 text의 복사본을 받으며, 원본 데이터에 대한 변경 사항은 반영되지 않습니다.
@Binding을 사용한 데이터 전달
@Binding Property wrapper를 사용하면 자식 뷰가 부모 뷰의 상태를 직접 참조할 수 있습니다. 이는 특히 사용자 인터페이스의 상호작용에 따라 데이터가 변경되어야 할 때 유용합니다.
struct ParentView: View {
@State private var text = "Hello World"
var body: some View {
NavigationLink(destination: ChildView(text: $text)) {
Text("Go to Child View")
}
}
}
struct ChildView: View {
@Binding var text: String
var body: some View {
TextField("Enter text", text: $text)
}
}
ChildView에서 text를 수정하면 ParentView의 text도 업데이트됩니다.
사례 분석
상황에 따라 단순 변수와 @Binding 중 어느 것을 사용할지 결정해야 합니다. 예를 들어, 설정 화면에서 사용자가 입력한 값을 실시간으로 반영해야 한다면 @Binding을 사용하는 것이 좋습니다. 반면, 데이터를 단순히 표시만 하고 수정할 필요가 없다면 단순 변수가 더 적합할 수 있습니다.
결론
SwiftUI에서 데이터를 효율적으로 관리하려면 @Binding과 단순 변수 간의 차이를 이해하는 것이 중요합니다. 상황에 맞게 적절한 방법을 선택하여, 더 유연하고 관리하기 쉬운 코드를 작성할 수 있습니다.
부록
SwiftUI 공식 문서: SwiftUI Tutorials