프로퍼티 옵저버
💡 프로퍼티 옵저버
- 프로퍼티가 설정될 때 또는 변경될 때를 관찰(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 프로퍼티는 연산 프로퍼티이지만, 프로퍼티 옵저버를 사용하여 프로퍼티의 값이 변경될 때 원하는 동작을 수행할 수 있다.
' 𝗔𝗣𝗣𝗟𝗘 > SWIFT : GRAMMAR' 카테고리의 다른 글
Swift 기초 문법 - 접근 제한자(access control) (2) | 2024.03.12 |
---|---|
Swift 기초 문법 - 타입 캐스팅(Type Casting) (0) | 2024.03.12 |
Swift 기초 문법 - 초기화(Initialization) (0) | 2024.03.11 |
Swift 기초 문법 - 상속(Inheritance) (0) | 2024.03.11 |
Swift 기초 문법 - 클래스, 구조체, 열거형 (0) | 2024.03.11 |