2023. 12. 2. 01:29ㆍApple/iOS
KVO 는 데이터를 바인딩해주는 방법 중 하나이다.
데이터 바인딩하니 SwiftUI에서 @State var data 즉각적으로 업데이트 해주고, Binding 은 State 에게 데이터를 연결받고 하위뷰에게 상태를 공유해주는 그런 역할을 했더랬다.
그럼 키와 값 관찰? 이라는 KVO 는 어떤 식으로 동작할까?
Key Value Observing 의 정의
다른 객체의 속성에 대한 변경사항을 객체에 알린다. 가만있어보자, 이걸보니 NotificationCenter(이것도 등록된 관찰자에게 정보를 알려주는 역할을 하는 NSObject 클래스) 가 생각나는구나!
다시 본론으로 돌아와 Key Value Observing(키-값 관찰)은 다른 개체의 속성 변경 사항을 객체에 알리는 데 사용하는 Cocoa Programming 패턴이라고 한다. 모델과 뷰 등을 논리적으로 분리된 앱 부분 간 변경사항을 전달하는 데 유용하다.
기본적인 사용 형태
@objc 속성과 dynamic modifier(동적 수정자) 를 모두 사용해 키-값 관찰을 통해 관찰하는 속성을 표시한다.
Observer 를 정의
관찰자 클래스의 인스턴스는 하나 이상의 속성에 대한 변경사항에 대한 정보를 관리한다. 관찰자를 생성할 때 관찰하려는 속성을 참조하는 키 경로를 사용해 `observe(_ : options: changeHandler: )` 메소드(함수)를 호출해 관찰을 시작한다.
아래 예에서 \. objectToObserve.myDate
key path(키 경로) 는 MyObjectToObserve:
의 myDate
속성을 참조한다.
class MyObserver: NSObject {
@objc dynamic var objectToObserve: MyObjectToObserve
var observation: NSKeyValueObservation?
init(object: MyObjectToObserve) {
objectToObserve = object
super.init()
observation = observe(
\.objectToObserve.myDate,
options: [.old, .new]
) { object, change in
print("myDate changed from: \(change.oldValue!), updated To: \(change.newValue!)")
}
}
}
NSKeyValueObservedChange 인스턴스의 oldValue 및 newValue 속성을 사용하여 관찰 중인 속성에 대해 변경된 사항을 확인한다.\
Associate the Observer with the Property to Observe (관찰할 속성과 관찰자를 연결한다.)
객체를 관찰자의 이니셜라이저(초기생성자) 에 전달하여 관찰하려는 속성을 관찰자와 연결한다.
let observed = MyObjectToObserve()
let observer = MyObserver(object: observed)
Respond to a Property Change (속성 변경에 응답)
위에서 관찰한 것과 같이 키-값 관찰을 사용하도록 설정된 객체는 Observer(관찰자에게) 속성 변경에 대해 알린다.
'Apple > iOS' 카테고리의 다른 글
[ 앱 출시 ] 설정 메뉴에 들어갈 것들! (0) | 2024.03.07 |
---|---|
[ Unit Test ] Xcode 에서 단위 테스트 하는 것, XCTest - 1 (2) | 2024.01.18 |
viewController 의 생명주기 ( UIViewController's Life cycle) (0) | 2023.11.26 |
NotificationCenter 에 대해서 알아보자. (0) | 2023.11.19 |
[ UIKit ] - UIWindow의 역할 (Windows and Screens) (0) | 2023.11.17 |