공부/SWIFT

[SWIFT] 프로퍼티( 프로퍼티 옵저버 ) ★★★

알로하리미 2021. 3. 11. 16:00
728x90

1. 개요

프로퍼티는 클래스, 구조체 또는 열거형 등에 관련된 값(속성)을 뜻한다.

저장(Stored), 연산(Computed), 타입 프로퍼티로 나눈다.

연산 프로퍼티 : 특정 타입의 인스턴스에서 특정 연산을 실행한 결과값을 의미 (구조체, 클래스, 열거형에서 사용)

프로퍼티 옵저버 기능은 전역변수와 지역변수 모두에서 이용 가능

* 프로퍼티의 값이 변하는 것을 감시하는 프로퍼티 감시자(Property Observers)도 있다.

 

 

2. 프로퍼티 감시자 (Property Observers)

  • willSet 매서드 : 값이 저장되기 바로 직전에 호출 됨

  • didSet 매서드 : 새 값이 저장되고 난 직후에 호출 됨

    willSet에서는 새 값의 파라미터명을 지정할 수 있는데, 지정하지 않으면 기본 값으로 newValue를 사용합니다.

    didSet에서는 바뀌기 전의 값의 파라미터명을 지정할 수 있는데, 지정하지 않으면 기본 값으로 oldValue를 사용합니다.

일반프로퍼티, 상속받은프로퍼티, 연산프로퍼티에 사용가능

프로퍼티의 값이 새로 할당될 때마다 호출 ( 현재의 값과 같더라도 호출 )

연산프로퍼티는 상속받았을 때만 프로퍼티 재정의를 통해 프로퍼티 감시자를 사용.

지연 저장 프로퍼티에는 사용 불가.

* 서브클래스에서 특정 프로퍼티의 값을 설정했을 때, 수퍼클래스의 초기자(initializer)가 호출 된 후 willSet, didSet 프로퍼티 옵저버가 실행됩니다. 수퍼클래스에서 프로퍼티를 변경하는 것도 마찬가지로 수퍼클래스의 초기자가 호출된 후 옵저버가 실행됩니다.

* 만약 프로퍼티 감시자가 있는 프로퍼티를 함수의 입출력 매개변수의 전달인자로 전달 한다면 항상 willSet과 didSet 감시자를 호출합니다. 함수 내부에서 값이 변경되든 되지 않든 간에 함수가 종료되는 시점에 값을 다시 쓰기 때문입니다.

class StepCounter {
    var totalSteps: Int = 0 {
    
        willSet(newTotalSteps) {
        
            print("About to set totalSteps to \(newTotalSteps)")
            
        }
        
        didSet {
        
            if totalSteps > oldValue  {
                print("Added \(totalSteps - oldValue) steps")
            }
        }
    }
}

let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalSteps to 200
// Added 200 steps

stepCounter.totalSteps = 360
// About to set totalSteps to 360
// Added 160 steps

stepCounter.totalSteps = 896
// About to set totalSteps to 896
// Added 536 steps

 

 

2021.03.11 - [공부/SWIFT] - [SWIFT] 프로퍼티( 저장 프로퍼티 ) ★★★

2021.03.11 - [공부/SWIFT] - [SWIFT] 프로퍼티( 연산 프로퍼티 ) ★★★

2021.03.11 - [공부/SWIFT] - [SWIFT] 프로퍼티(타입 프로퍼티) ★★★