본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/SWIFT : GRAMMAR

Swift 기초 문법 - 프로퍼티 옵저버

 

 

 

 

프로퍼티 옵저버

 

 

 

💡 프로퍼티 옵저버

 

- 프로퍼티가 설정될 때 또는 변경될 때를 관찰(observe)하면서 변경 사항 발생 시 호출

- 주로 프로퍼티의 값을 감시하고 미리 구현한 코드로 이에 대응할 수 있음

- 클래스, 구조체, 열거형의 저장 프로퍼티에 적용할 수 있음

- 연산 프로퍼티에도 프로퍼티 옵저버를 추가할 수 있으나, 조건이 있음

 

 

willSet

   프로퍼티에 새로운 값이 할당되기 전에 호출

  → 새로운 값이 매개변수로 전달

  → 일반적으로 이곳에서는 새로운 값에 대한 유효성 검사를 수행하거나 다른 프로퍼티에 영향을 줄 수 있는 추가 작업 수행

  → 새로운 프로퍼티의 값이 newValue 로 제공

 

didSet

   프로퍼티에 새로운 값이 할당된 후에 호출

  → 이전 값이 매개변수로 전달
  → 주로 이곳에서는 새로운 값에 대한 처리를 수행하거나 프로퍼티 값이 변경된 후의 추가 작업을 수행함

  → 이전 프로퍼티의 값이 oldValue 로 제공

 

 

 프로퍼티 옵저버 정의 

var property: Type = initialValue {
    willSet(newProperty) {
        // 새로운 값이 할당되기 전에 수행할 작업
    }
    didSet(oldProperty) {
        // 새로운 값이 할당된 후에 수행할 작업
    }
}

 

 

 


 

 

 

💡 연산 프로퍼티에서 프로퍼티 옵저버 사용하기

 

 

 연산 프로퍼티 사용 조건 

- 부모 클래스의 연산 프로퍼티를 재정의(override) 할 경우 프로퍼티 옵저버를 추가할 수 있음 

 

 

 왜 연산 프로퍼티에서 사용하려면 조건이 필요한가? 

- setter를 통해 값 변경을 감지할 수 있기 때문

 

 

 사용예시 

  → Sodeul 클래스가 Human 클래스를 상속하며, alias라는 연산 프로퍼티를 재정의(override)하여 프로퍼티 옵저버를 추가한 예시

class Sodeul: Human {
    override var alias: String {
        willSet {
            print("현재 alias = \(alias), 바뀔 alias = \(newValue)")
        }
        didSet {
            print("현재 alias = \(alias), 바뀌기 전 alias = \(oldValue)")
        }
    }
}

 

alias 프로퍼티는 연산 프로퍼티로, 값을 저장하는 것이 아니라 다른 프로퍼티의 값을 계산하여 반환한다.
  → 연산 프로퍼티는 get 블록을 사용하여 값을 가져오고, set 블록을 사용하여 값을 설정한다.

 

프로퍼티 옵저버는 프로퍼티의 값이 변경될 때 특정 동작을 수행하는 기능을 제공한다.

  → willSet은 프로퍼티의 값이 변경되기 직전에 호출되고, didSet은 프로퍼티의 값이 변경된 후에 호출된다.

 

연산 프로퍼티의 경우에도 프로퍼티에 값이 할당되기 전(willSet)과 할당된 후(didSet)에 원하는 동작을 수행할 수 있으며, 이는 프로퍼티의 값이 변경되는 시점에 특정 로직을 실행할 수 있도록 해준다.

  → 위 코드에서는 프로퍼티 값이 변경되기 직전과 직후에 해당 프로퍼티의 값을 출력하는 동작을 구현했다.

 

따라서 alias 프로퍼티는 연산 프로퍼티이지만, 프로퍼티 옵저버를 사용하여 프로퍼티의 값이 변경될 때 원하는 동작을 수행할 수 있다.

 

 

 

 

 

 

 

프로퍼티(Property)

 

Swift 기초 문법 - 프로퍼티(Property)

새로 수강한 강의에 대해 정리 이미 정리한 내용도 있겠지만 다시 한 번 복습을 위해 작성했다 / 일부 참고 💡 프로퍼티 (Property) - 프로퍼티는 클래스, 구조체 또는 열거형 등에 관련된 값 프로

wood-fxrest.tistory.com

 

 

 

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31