반응형
Notice
Recent Posts
Recent Comments
Link
- Today
- Total
07-20 14:02
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Optional
- rest api
- 연산자
- 명령어
- sigmoid
- 시각화
- barplot
- 티스토리챌린지
- tapply
- SWIFT
- Linux
- Request
- struct
- substr
- deeplearning
- 딥러닝
- SQL
- ReLU
- cocoapods
- rxswift
- swiftUI
- 오블완
- ios
- MVC
- Observable
- scheduledTimer
- Python
- r
- decode
- HTTP
Archives
iOS 개발 기록 블로그
[SwiftUI] 속성 래퍼(@State 등)와 일반 프로퍼티의 차이와 사용 방법 본문
반응형
@State, @ObservedObject, @EnvironmentObject 같은 속성 래퍼를 사용한 프로퍼티와
일반 프로퍼티(let 또는 var)로 선언되어 사용하는 것들의 차이점은 무엇일까?
🔍 일반 프로퍼티로 선언해서 사용하는 예시
public struct MyView: View {
...
var someProperty: Bool
public init(someProperty: Bool) {
self.someProperty = someProperty
}
이 구조는 SwiftUI에서 뷰 초기화 시 외부에서 값을 전달받고 이후 변경되지 않을 값을 받을 때 사용하는 일반적인 패턴입니다.
💡 왜 @State나 @Binding이 아니라 var인가요?
요약 정리
@State | 내부에서 변경할 로컬 상태용. 뷰 안에서 수정 목적일 때 사용 | ❌ 변경이 목적이 아님 |
@Binding | 부모로부터 전달받은 양방향 바인딩 값. 값 변경이 가능하고 변경을 부모에게 전파해야 할 때 사용 | ❌ 상위 뷰에 값을 다시 전달할 필요 없음 |
let 또는 var | 외부에서 전달받고 뷰에서 읽기만 할 값. 변경되지 않거나 변경할 필요가 없는 고정된 설정용 | ✅ 적합 |
일반 프로퍼티
- 외부에서 한 번 전달받고,
- 내부에서는 읽기 전용으로만 사용되고,
- 값이 변하지 않으며, 다른 뷰로도 전달되지 않음.
위와 같은 경우에 사용합니다.
📌 예시로 비교해볼게요
struct ParentView: View {
var body: some View {
MyView(someProperty: true) // 전달
}
}
이 경우 MyView는 단순히 그 값을 읽기만 하므로 var someProperty: Bool이면 충분한 거죠.
반대로 이런 경우는 속성 래퍼가 필요합니다:
@State
예시:
@State private var count = 0
→ 뷰 내부에서 변경하면서 UI를 갱신해야 할 상태 값
@Binding
예시:
struct ChildView: View {
@Binding var isOn: Bool
}
→ 부모 뷰에서 전달하고 변경 결과도 다시 받아야 할 값
✅ 결론
일반 프로퍼티는
뷰가 생성될 때 한 번 초기화되고,
내부에서 변경하지 않으며,
외부와 상태 동기화가 필요 없는 단순 설정 값이기 때문에
속성 래퍼 없이 일반 프로퍼티로 선언된 것입니다.
이는 SwiftUI에서 의도적으로 그렇게 설계된 올바른 사용법입니다.
반응형
'iOS > SwiftUI' 카테고리의 다른 글
[SwiftUI] @StateObject, @ObservedObject, @EnvironmentObject 차이 비교 (chatGPT) (1) | 2025.06.25 |
---|---|
[SwiftUI] @ToolbarContentBuilder로 가독성 개선 (0) | 2024.03.14 |
[SwiftUI] 네비게이션바 알 수 없는 여백 없애버리기 (0) | 2024.03.13 |
[SwiftUI] .navigationBarBackButtonHidden() 처리 후 PopSwipeGesture 버그 수정하기 (0) | 2024.03.12 |
[SwiftUI] @Environment(\.presentationMode) 사용해서 간편하게 View dismiss 하기 (0) | 2024.03.11 |