iOS/Swift

[Swift] 속성 감시자 (Property Observer)

듀니듀니 2022. 11. 25. 18:08

오늘은 속성 감시자에 대해 정리하려고 합니다.

 

 

속성 감시자는 저장 속성이 변하는 시점을 관찰합니다.

저장 속성이 변하는 순간, 구현되어 있는 메서드가 호출됩니다.

1) willSet은 값이 저장되기 직전에 호출됩니다.

2) didSet은 새 값이 저장된 직후에 호출됩니다.

class Apple {
    
    // 일반 저장 속성
    var message: String = "가격이 변경 되었습니다."
    // 속성 감시자
    var price: Int {
        willSet(price) {  // 바뀔 값이 파라미터로 전달
            print("사과의 가격이 \(self.price)원에서 \(price)원으로 변경될 예정입니다.")
            print("가격 변경전")
        }
        didSet(price) {   // 바뀌기 전의 과거값이 파라미터로 전달
            print("사과의 가격이 \(price)원에서 \(self.price)원으로 이미 변경되었습니다.")
            print("가격 변경후")
        }
    }
    
    init(price: Int) {
        self.price = price
    }
    
}
let apple = Apple(price: 3000)
apple.price
apple.price = 5000

/* 실행결과 */
//사과의 가격이 3000원에서 5000원으로 변경될 예정입니다.
//가격 변경전
//사과의 가격이 3000원에서 5000원으로 이미 변경되었습니다.
//가격 변경후

 - 클래스, 구조체, (열거형) 동일하게 적용

 - 어떤 속성이 변하는 시점을 알아차리도록 시점에 제약을 만드는 코드를 짜기는 어려움

 - 그래서 실제 서비스에 활용할때 좋은 수단

 - 일반적으로는 willSet 또는 didSet 중에서 한가지만 구현

 - 실제 프로젝트에서는 didSet을 많이 사용

'iOS > Swift' 카테고리의 다른 글

[Swift] guard와 if-let 비교해보기  (0) 2022.12.07
[Swift] 서브스크립트 (Subscripts)  (0) 2022.11.25
[Swift] 클래스와 구조체 (Class, Struct)  (0) 2022.11.22
[Swift] Optional  (0) 2022.11.17
[Swift] Array  (0) 2022.11.16