Key-Value Observing (KVO) 이란
KVO(Key-Value Observing)는 객체의 속성(property)이 변경될 때 이를 자동으로 감지하고 반응할 수 있는 메커니즘입니다.
만약 어떠한 객체에 'name' 란 속성이 변경이 되었을때 이를 자동으로 감지하고 싶을때 KVO를 사용하여 해당 변경 사항을 모니터링할 수 있습니다.
class Person: NSObject {
@objc dynamic var name: String = ""
}
class NameObserver: NSObject {
var person: Person
init(person: Person) {
self.person = person
super.init()
// KVO를 사용하여 name 속성의 변화를 감지함
person.addObserver(self, forKeyPath: "name", options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "name" {
if let newName = change?[.newKey] as? String {
print("이름이 \(newName)으로 변경되었습니다.")
}
}
}
deinit {
person.removeObserver(self, forKeyPath: "name")
}
}
let person = Person()
let observer = NameObserver(person: person)
person.name = "Alice"
// 출력: 이름이 Alice으로 변경되었습니다.
관찰자가 되는 객체는 addObserver(_:forKeyPath:options:context:) 메서드를 사용하여, 어떤 객체의 어떤 속성을 관찰할지를 지정합니다.
속성의 값이 변경되면 observeValue(forKeyPath:of:change:context:) 메서드가 호출되어, 해당 변경 사항에 대해 필요한 처리를 할 수 있습니다.
왜 사용해야할까 or 나만의 고민
KVO를 통해 객체의 상태 변화를 비동기적으로 감지가 가능합니다. 이를 이용하여 UI 요소가 이 데이터 모델에 의존할 때 변화를 실시간으로 UI에 반영이 가능합니다.
Objective-C와의 호환성이 필요한 경우 사용 SwiftUI에서는 ObservedObject를 통해 객체의 상태 변화를 관찰합니다.
'iOS > Swift' 카테고리의 다른 글
[Swift] didSet,willSet 이란 (0) | 2024.08.27 |
---|---|
[Swift] Key-Value Coding(KVC) 란 (0) | 2024.08.27 |
[iOS][Swift] App LifeCycle - 앱 생명주기 (0) | 2024.05.24 |
[Swift] Extensions (확장) 이란 (1) | 2024.04.12 |
[Swift] unrecognized selector sent to instance (0) | 2023.06.02 |