TIL14 ✨

YaR Lab·2023년 5월 11일
0

TIL✨

목록 보기
4/135
post-thumbnail

23.05.11

https://ios-development.tistory.com
소들이
https://seons-dev.tistory.com

###KVO

Key-value observing은 객체 간에 속성이 변경될 때 다른 객체가 직접 알림을 받을 수 있게 하는 메커니즘입니다. Key-value observing 또는 KVO는 Model-View-Controller 디자인 패턴을 준수하여 설계된 애플리케이션의 일관성에 중요한 역할을 할 수 있습니다. 예를 들어, 모델 객체의 상태를 뷰 및 컨트롤러 레이어의 객체와 동기화하는 데 사용할 수 있습니다. 일반적으로 컨트롤러 객체는 모델 객체를 관찰하고, 뷰는 컨트롤러 객체나 모델 객체를 관찰합니다.

참고: UIKit 프레임워크의 클래스들은 일반적으로 KVO를 지원하지 않지만, 애플리케이션의 사용자 정의 객체 (사용자 정의 뷰 포함)에서는 여전히 구현할 수 있습니다.

KVO를 사용하면 객체는 간단한 속성, to-one 관계 및 to-many 관계를 포함하여 다른 객체의 모든 속성을 관찰할 수 있습니다. 객체는 속성의 현재 및 이전 값을 알 수 있습니다. to-many 관계의 관찰자는 변경된 유형뿐만 아니라 변경에 관여한 객체도 알 수 있습니다.

알림 메커니즘으로서, key-value observing은 NSNotification 및 NSNotificationCenter 클래스에서 제공하는 메커니즘과 유사하지만 중요한 차이점도 있습니다. 관찰자로 등록된 모든 객체에게 알림을 방송하는 중앙 객체 대신, KVO 알림은 속성 값 변경이 발생할 때 직접 관찰 객체로 전송됩니다.

KVO 구현하기
NSObject 클래스는 key-value observing의 기본 구현을 제공하므로 거의 오버라이드할 필요가 없습니다. 따라서 모든 코코아 객체는 기본적으로 key-value observing이 가능합니다. 속성에 대한 KVO 알림을 받으려면 다음과 같은 작업을 수행해야 합니다.

관찰 대상 클래스가 관찰하려는 속성에 대해 KVO compliant한지 확인해야 합니다.
KVO compliance를 위해서는 관찰 대상 객체의 클래스가 KVC compliant하며, 속성에 대한 자동 관찰자 알림을 허용하거나 속성에 대해 수동 key-value observing을 구현해야 합니다.

값이 변경될 수 있는 객체의 관찰자를 추가해야 합니다. 이를 위해 addObserver:forKeyPath:options:context:를 호출합니다. 관찰자는 애플리케이션 내의 다른 객체입니다.
관찰자 객체에서는 observeValueForKeyPath:ofObject:change:context: 메서드를 구현해야 합니다. 이 메서드는 관찰 대상 객체의 속성 값이 변경될 때 호출됩니다.

KVO는 바인딩의 핵심 요소입니다(OS X)
Cocoa 바인딩은 애플리케이션의 모델 및 뷰 레이어의 값을 많은 "glue code"를 작성하지 않고 동기화할 수 있게 해주는 OS X 기술입니다. Interface Builder inspector를 통해 뷰의 속성과 데이터 조각 간의 중재된 연결을 설정하여 한쪽이 변경되면 다른 쪽에 반영되도록 "바인딩"할 수 있습니다. KVO는 key-value coding 및 key-value binding과 함께 Cocoa 바인딩에 필수적인 기술입니다.

Swift에서 Key-Value Observing 사용하기

다른 객체의 속성 변경 사항에 대해 객체에게 알리기.

overview

키-값 관찰(Key-value observing)은 다른 객체의 속성 변경에 대해 객체에게 알리는 Cocoa 프로그래밍 패턴입니다. 이는 모델과 뷰와 같이 논리적으로 분리된 앱의 부분 간의 변경 사항을 전달하는 데 유용합니다. 키-값 관찰은 NSObject에서 상속된 클래스에서만 사용할 수 있습니다.

Annotate a Property for Key-Value Observing

Key-Value Observing을 사용할 속성에는 @objc 속성과 dynamic 수정자를 함께 사용하여 표시합니다. 아래 예제는 관찰될 수 있는 속성인 myDate를 가진 MyObjectToObserve 클래스를 정의합니다.

(참고: @objc 속성은 Objective-C와 상호 운용성을 위해 필요하며, dynamic 수정자는 속성 값에 대한 직접 접근을 허용합니다.)

0개의 댓글