안녕하세요! 피피아노입니다🎵
이번 포스팅에서는 SwiftUI의 상태 프로퍼티(State Property)에 대해서 정리해보도록 하겠습니다.
서론
SwiftUI는 앱 개발에 있어서 데이터 중심의 접근 방식을 선호합니다.
이 방식에서는, 사용자 인터페이스의 각 뷰가 기본 데이터가 변할 때마다 별도의 업데이트 코드를 작성하지 않아도 자동으로 갱신되는 특성을 가지고 있습니다. 이는 데이터와 뷰 사이에 마련된 게시자(publisher)와 구독자(subscriber)의 관계를 통해 가능해집니다.
SwiftUI는 이러한 데이터 주도적인 사용자 인터페이스를 구현하기 위해 여러 도구를 제공합니다. 상태 프로퍼티(State properties), 관찰 가능한 객체(Observable objects), 상태 객체(State objects), 그리고 환경 객체(Environment objects)가 그 예입니다. 이들은 모두 사용자 인터페이스의 외형과 작동 방식을 결정하는 상태 정보를 관리합니다.
SwiftUI에서는 뷰를 구성할 때, 그 뷰를 직접적으로 업데이트하지 않습니다. 대신, 뷰와 연결된 상태 객체가 시간이 흐름에 따라 변경될 때, 해당 상태의 변화에 따라 뷰가 자동적으로 갱신됩니다.
상태 프로퍼티(State Property)란?
상태 프로퍼티(State Property)는 상태에 대한 가장 기본적인 형태이며, 뷰의 내부 상태를 관리하는 핵심적인 도구입니다. 상태 프로퍼티는 사용자 인터페이스의 특정 부분이 데이터 변화에 따라 업데이트 되어야 할 때 사용됩니다.
상태 프로퍼티는 String이나 Int처럼 간단한 데이터 타입을 저장하기 위해 사용됩니다.
상태 프로퍼티의 정의 방법
상태 프로퍼티는 @State 프로퍼티 래퍼를 사용하여 선언됩니다. 이는 뷰 내부에서 관리되어야 하는 값에 사용됩니다.
예를 들어, 사용자 입력을 저장하는 변수나 현재 선택된 탭과 같은 UI 상태를 관리할 때 사용할 수 있습니다.
@State private var isToggled = false
@State 변수는 주로 해당 뷰 내에서만 관리되고 업데이트되는 값에 사용됩니다. 값이 변경될 때마다 뷰가 자동으로 업데이트되어 사용자 인터페이스를 최신 상태로 반영하게 만들어주게 되죠.
상태 프로퍼티를 사용하면 데이터가 변경될 때 SwiftUI가 자동으로 뷰를 업데이트하는데, 이러한 방식은 선언적 UI 접근 방식의 핵심입니다.
상태 프로퍼티의 사용 예시
상태 프로퍼티의 사용 예시를 살펴보기 위해 사용자가 토클을 조작할 때마다 스위치가 켜졌다, 꺼졌다를 반복하는 코드를 한번 작성해보겠습니다!
struct ToggleView: View {
@State private var isToggled = false
var body: some View {
Toggle(isOn: $isToggled) {
Text("스위치 상태: \(isToggled ? "켜짐" : "꺼짐")")
}
}
}
위 코드를 살펴보면 isToggled 상태는 사용자가 토글을 조작할 때마다 업데이트됩니다. @State 프로퍼티 래퍼 덕분에, 이 값의 변화가 있을 때마다 ToggleView의 body가 다시 계산되어 화면에 반영됩니다.
주의점
상태 프로퍼티는 해당 뷰의 내부 상태를 위한 것이므로, 뷰 외부에서 직접 접근하거나 수정하는 것은 권장되지 않습니다. 외부 데이터를 뷰에 전달할 필요가 있다면, 다른 데이터 흐름 메커니즘(예: @Binding, @ObservedObject, @EnvironmentObject 등)을 사용하는 것이 좋습니다.
@State는 값 유형(Value Types)에 가장 적합합니다. 참조 유형(Reference Types)을 사용해야 할 경우, @ObservedObject나 @StateObject와 같은 다른 프로퍼티 래퍼를 고려하는 것이 좋습니다.
Observable 객체와 State 객체, 그리고 Environment 객체는 다음 포스팅에서 정리해보도록 하겠습니다!
감사합니다!
잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!
궁금하신 부분은 댓글로 질문 부탁드립니다!
'Apple > SwiftUI' 카테고리의 다른 글
[SwiftUI] List에 대한 기본기 이해하기 (0) | 2024.05.06 |
---|---|
[SwiftUI] 애플은 왜 SwiftUI를 출시 했을까? (0) | 2024.04.01 |
[SwiftUI] SwiftUI 스택 정렬(VStack, HStack, ZStack)과 정렬 가이드 (0) | 2024.03.14 |
[SwiftUI] SwiftUI 뷰(View) 이해하기 (0) | 2024.03.01 |
[SwiftUI] Spacer 이해하고 응용해보기 (0) | 2024.01.16 |