Property:
Swift에서는 프로퍼티를 저장 프로퍼티(Stored Property)
와 연산 프로퍼티(Computed Property)
로 구분할 수 있으며, willSet
, didSet
감시자는 stored property에만 사용할 수 있다.
Stored Property (저장 프로퍼티)
- 값을 메모리에 저장하는 프로퍼티
- 클래스, 구조체에서 사용 가능
let
,var
로 선언 가능1
2
3
4struct User {
var name: String // 저장 프로퍼티
let age: Int // 저장 프로퍼티 (상수)
}
Computed Property (연산 프로퍼티)
- 값을 저장하지 않고 계산을 통해 반환하는 프로퍼티
get
블록 필수,set
은 선택적- 메모리에 저장되지 않음
1
2
3
4
5
6
7
8struct Rectangle {
var width: Double
var height: Double
var area: Double {
return width * height // << Computed Property
}
}
willSet / didSet
- willSet: 값이 변경되기 직전 호출됨
- didSet: 값이 변경된 직후 호출됨
stored property
에만 사용 가능 (computed property
에는 불가)1
2
3
4
5
6
7
8var name: String = "Original" {
willSet {
print("willSet: \(newValue)")
}
didSet {
print("didSet: \(oldValue)")
}
}
주의 사항:
willSet
의 매개변수 이름은 기본적으로newValue
didSet
의 매개변수 이름은 기본적으로oldValue
init()
초기화 시에는 호출되지 않음computed property
에서는 사용할 수 없음 → 컴파일 에러 발생
차이점
항목 | Stored Property | Computed Property |
---|---|---|
값 저장 | ✅ 저장함 | ❌ 저장 안 함 |
메모리 공간 사용 | ✅ 사용함 | ❌ 없음 (계산만 함) |
선언 방식 | var , let |
var + get / set |
willSet/didSet 사용 | ✅ 가능 | ❌ 불가능 |
lazy 키워드 사용 | ✅ 가능 | ❌ 불가능 |
용도 | 값을 직접 저장하고 유지 | 계산 결과를 반환할 때 사용 |
요약
- Stored Property: 값을 저장하며 감시자(willSet/didSet) 사용 가능
- Computed Property: 값을 저장하지 않고 계산하여 반환, 감시자 사용 불가