Key-Value Observing 프로그래밍 가이드
Last updated
Last updated
원문 출처
Key-value observing은 객체가 다른 객체의 특정 속성이 변경되었을때 알림을 받을 수 있도록 해주는 메커니즘입니다.
프로퍼티 관찰은 단순한 속성에서부터, 일대 일 관계나 일대 다 관계까지도 가능합니다. 일대 다 관계의 옵저버는 변경 타입과 변경과 관련된 객체에 대해서도 알 수 있습니다.
간단한 예시 그림으로 KVC이 어떻게 어플리케이션에 유용하게 동작하는지 보겠습니다. Person 객체 Account 객체와 상호작용을 가정하여 pserson이 은행의 저금하는 것을 표현할 것입니다. Person 인스턴스는 Account 인스턴스의 특정 정보(예: 잔액, 이자율)가 변경될 때를 알아야 할 수 있습니다.
만약 이 속성들이 Account의 공개 프로퍼티라면 Person은 주기적으로 Account를 조사하여 변경사항을 발견할수도 있겠지만, 이 방법은 매우 비효율적입니다. 더 좋은 접근법은 KVO를 사용하는 것인데, 마치 변경이 일어났을때 Person이 인터럽트를 받는것과 같이 동작합니다.
마지막으로 더이상 노티피케이션을 원하지 않는다면 늦어도 메모리가 해제되기 전에 Person 객체는 반드시 removeObserver:forKeyPath: 메세지를 Account에 보내서 등록을 해지해야 합니다.
KVO의 최대 장점은 프로퍼티가 변경될 때마다 알림을 보내도록 자체 스키마를 구현할 필요가 없다는 것입니다. 이것은 프레임워크 수준에서 지원하는 잘 정의된 인프라로써 아주 쉽게 사용할 수 있으며 일반적으로는 프로젝트에 코드를 추가할 필요도 없습니다.
Key-value observing은 객체가 다른 객체의 특정 속성이 변경되었을때 알림을 받을 수 있도록 해주는 메커니즘입니다. 이것은 특히 사이의 통신에서 매우 유용합니다. (OS X에서는 의 바인딩 기술이 key-value observing에 크게 의존하고 있습니다) 컨트롤러 객체는 일반적으로 모델 객체의 프로퍼티를 관찰하고 뷰 객체는 컨트롤러를 통해서 모델 객체의 프로퍼티를 관찰합니다. 그렇지만 모델 객체도 (종속적인 값의 변경 시기를 결정하기 위해서) 다른 모델 객체를 관찰하거나 자기 자신까지도 관찰할 수 있습니다.
KVO를 사용하기 위해서는 우선 관찰받는 객체가 (이 경우에는 Account) KVO를 준수하는지를 확인해야 합니다. 일반적으로 NSObject를 상속하는 객체에서 일반적인 방법으로 생성한 프로퍼티라면 자동적으로 KVO을 준수합니다. 수동으로 호환성을 구현하는 것 또한 가능합니다. 문서는 자동적인 KVO과 수동 KVO의 차이점을 서술하고 각각을 어떻게 구현하는지에 대해서 설명합니다.
다음으로, 관찰자 인스턴스 Person을 관찰되는 인스턴스 Account에 등록해야 합니다. Person은 메세지를 Account에 보내고 관찰된 key papth마다 한번씩 자기 자신을 관찰자로 명명합니다.
Account로부터 변경 노티피케이을 받기 위해서 Person은 메서드를 구현합니다. Account는 등록된 Key path 중 하나가 변경될 때마다 이 메세지를 Person에게 보내고 Person은 변경 노티피케이션에 따라서 적절한 조치를 취할 수 있습니다.
문서는 옵저버 등록, 노티피케이션 수신과 등록 해지까지 전체 라이프 사이클에 대해서 설명합니다.
문서는 키 값과 다른 키 값간의 의존성을 명시하는 방법에 대해서 설명합니다.
를 사용하는 노티피케이션과는 다르게 KVO에는 모든 옵저버에게 변경 노티피케이션을 제공하는 중심 객체가 없습니다. 대신에 KVO는 변경이 발생했을때 직접적으로 노티피케이션을 전달합니다. NSObject는 KVO의 기본 구현을 제공하며 이 메셔드들을 오버라이드 할 일은 아주 드뭅니다.
문서는 key-value observing이 어떻게 구현되는지를 설명합니다.