Menu
Menu
Posts List
  1. Property:
    1. Stored Property (저장 프로퍼티)
    2. Computed Property (연산 프로퍼티)
  2. willSet / didSet
  3. 차이점
  4. 요약

Property

Property:

Swift에서는 프로퍼티를 저장 프로퍼티(Stored Property)연산 프로퍼티(Computed Property)로 구분할 수 있으며, willSet, didSet 감시자는 stored property에만 사용할 수 있다.


Stored Property (저장 프로퍼티)

  • 값을 메모리에 저장하는 프로퍼티
  • 클래스, 구조체에서 사용 가능
  • let, var로 선언 가능
    1
    2
    3
    4
    struct User {
    var name: String // 저장 프로퍼티
    let age: Int // 저장 프로퍼티 (상수)
    }

Computed Property (연산 프로퍼티)

  • 값을 저장하지 않고 계산을 통해 반환하는 프로퍼티
  • get 블록 필수, set은 선택적
  • 메모리에 저장되지 않음
    1
    2
    3
    4
    5
    6
    7
    8
    struct 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
    8
    var 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: 값을 저장하지 않고 계산하여 반환, 감시자 사용 불가