📌 willSet, didSet이란?
willSet, didSet은 Swift에서 프로퍼티의 값이 변경될 때 자동으로 실행되는 코드 블록으로,
이러한 기능을 속성 감시자(Property Observers)라고 부른다.
✅ 한 줄 요약
willSet
: 값이 변경되기 직전에 호출됨 (newValue
)didSet
: 값이 변경된 직후에 호출됨 (oldValue
)
🧠 왜 쓰는 건데?
값이 바뀌면 자동으로 무언가 처리하고 싶을 때 주로 사용한다.
ex)
- 이름이 바뀌면 로그 출력
- 설정값이 바뀌면 UI를 업데이트
- 변경된 값이 유효한지 검사
🚫 주의할 점
- init 과정에서는 willSet / didSet이 호출되지 않음
- willSet / didSet은 저장 프로퍼티에만 사용 가능함 (계산 프로퍼티 ❌)
기본 형태
var property: Type {
willSet {
// 이제 곧 바뀔 값 사용 가능 → newValue
}
didSet {
// 이전 값 사용 가능 → oldValue
}
}
🧾 사용 예시
struct Robot: Introducible {
// 기본 값을 "Robot"으로 해주고, 값이 변경될 경우 출력
var name: String = "Robot" {
didSet(oldValue) {
if name != oldValue {
print("name 변경 알림")
print("변경 이전 값: \(oldValue)")
print("변경 이후 값: \(name)")
}
}
}
}
var robot = Robot()
robot.name = "Robot" // 이전과 값이 같아서 아무것도 출력되지 않음
// 출력 x
robot.name = "test" // 값이 바뀌었기 때문에 아래 출력
// name 변경 알림
// 변경 이전 값: Robot
// 변경 이후 값: test
파라미터 이름 변경
oldValue, newValue 대신 원하는 이름으로 바꿔 쓸 수도 있다.
var name: String = "Robot" {
didSet(oldName) {
print("예전 이름: \(oldName)")
}
}
괄호를 생략하면 기본값인 oldValue
, newValue
가 자동으로 사용된다.
'🖋️ TIL Journal' 카테고리의 다른 글
06.18 (수) Xcode에서 시뮬레이터 추가하는 방법 (0) | 2025.06.18 |
---|---|
06.17 (화) [SnapKit] offset vs inset 정리 (0) | 2025.06.17 |
06.13 (금) iOS에서 버튼 액션 연결 - addTarget vs addAction (0) | 2025.06.13 |
06.12 (목) 🍫 Cocoa 프레임워크란 무엇일까? (1) | 2025.06.12 |
06.11 (수) Swift 주석 총 정리! (1) | 2025.06.11 |