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' 카테고리의 다른 글

Xcode에서 시뮬레이터 추가하는 방법  (0) 2025.06.18
[SnapKit] offset vs inset 정리  (0) 2025.06.17
iOS에서 버튼 액션 연결 - addTarget vs addAction  (0) 2025.06.13
🍫 Cocoa 프레임워크란 무엇일까?  (1) 2025.06.12
Swift 주석 총 정리!  (1) 2025.06.11
'🖋️ TIL Journal' 카테고리의 다른 글
  • Xcode에서 시뮬레이터 추가하는 방법
  • [SnapKit] offset vs inset 정리
  • iOS에서 버튼 액션 연결 - addTarget vs addAction
  • 🍫 Cocoa 프레임워크란 무엇일까?
MoriOS
MoriOS
기억하기 위해 기록하는 공간 🖋️
  • MoriOS
    MoriOS
    MoriOS
  • 전체
    오늘
    어제
    • 분류 전체보기 (66)
      • 📌 Swift (12)
      • 📱 iOS (9)
      • 💡 Algorithm (1)
      • ❕Data structure (4)
      • 🪙 Python (0)
      • ⚙️ Git (2)
      • 🖋️ TIL Journal (35)
      • 📝 Etc (3)
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    제약조건 수정
    makeconstraint
    동적 셀
    swift cow
    셀 높이
    cow 쓰기 복사
    제약조건 변경
    cow 참조 타입
    prepareconstraints
    ios
    Components
    스크롤 길이
    Split
    swift
    swift optional
    uikit
    static
    TiL
    cow 값 타입
    weak
    isscrollenabled
    GitHub
    remakeconstraints
    SnapKit
    Optional
    동적 스크롤
    후행클로저
    프로그래머스
    updateconstraints
    Codable
  • 최근 글

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

티스토리툴바