06.16(월) willSet / didSet 속성 감시자(Property Observers)

2025. 6. 16. 21:58·🖋️ TIL Journal
-->

 

📌 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
'🖋️ TIL Journal' 카테고리의 다른 글
  • 06.18 (수) Xcode에서 시뮬레이터 추가하는 방법
  • 06.17 (화) [SnapKit] offset vs inset 정리
  • 06.13 (금) iOS에서 버튼 액션 연결 - addTarget vs addAction
  • 06.12 (목) 🍫 Cocoa 프레임워크란 무엇일까?
MoriOS
MoriOS
기억하기 위해 기록하는 공간 🖋️
  • MoriOS
    MoriOS
    MoriOS
  • 전체
    오늘
    어제
    • 분류 전체보기 (56) N
      • 📌 Swift (10)
      • 📱 iOS (4)
      • 💡 Algorithm (1)
      • ❕Data structure (4)
      • 🪙 Python (0)
      • ⚙️ Git (2)
      • 🖋️ TIL Journal (32) N
      • 📝 Etc (3)
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    아이폰 시뮬레이터 추가
    inset
    Components
    속성 감시자
    static
    후행클로저
    버튼 액션
    GitHub
    Optional
    코코아 프레임워크 이름
    SnapKit
    Codable
    swift optional
    네비게이션 주석
    코코아 프레임워크
    ios
    Split
    주석 활용
    rawpepresentable
    버튼 동작
    swift json
    addaction
    TiL
    시뮬레이터 추가
    cocoa 프레임워크
    swift
    문서화 주석
    mark:
    weak
    시뮬레이터 변경
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
MoriOS
06.16(월) willSet / didSet 속성 감시자(Property Observers)
상단으로

티스토리툴바