SwiftUI에서 get, set, willSet, didSet은 속성(Property) 과 관련된 개념으로, 데이터의 읽기/쓰기 및 변경 감지에 사용된다. Swift 언어의 일반적인 속성 개념이지만, SwiftUI에서는 데이터 바인딩, 상태 관리 등과 연결되어 특히 중요하다.
get과 set: 연산 프로퍼티 (Computed Property)struct ContentView: View {
var age: Int = 20
var isAdult: Bool {
get {
return age >= 19
}
set {
print("새로운 isAdult 값: \(newValue)")
age = newValue ? 20 : 15
}
}
var body: some View {
Text(isAdult ? "성인입니다" : "미성년자입니다")
}
}
get: 값을 반환할 때 동작
set: 값을 설정할 때 동작 (newValue라는 기본 매개변수 사용)
willSet)또는 직후(didSet)에 호출된다struct ContentView: View {
@State private var name: String = "John" {
willSet {
print("이름이 곧 '\(newValue)'로 바뀔 예정입니다.")
}
didSet {
print("이전 이름: \(oldValue), 새로운 이름: \(name)")
}
}
var body: some View {
VStack {
Text("이름: \(name)")
Button("이름 변경") {
name = "Jane"
}
}
}
}
willSet(newValue): 값이 바뀌기 직전 호출됨 (기본 파라미터 newValue)
didSet(oldValue): 값이 바뀐 직후 호출됨 (기본 파라미터 oldValue)
⚠️ 주의:
@State,@Binding,@Published등 속성 래퍼와 함께 사용할 때는willSet,didSet이 잘 동작하지 않을 수 있다.
대신.onChange(of:)를 활용하는 게 SwiftUI에서는 더 안정적이다.onChange(of: name) { newValue in print("name이 변경되었습니다: \(newValue)") }