ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Apple Dev Reference] KVO - Key-Value Observing Programming Guide
    앱등이에게 살충제를 뿌린다./Apple Dev Reference 2016. 1. 17. 16:44


    Apple Developer 문서를 번역만 하였습니다.



    Key-Value Observing Programming 에 대한 소개

    Key-value observing이란 특정 객체의 프로퍼티의 변경사항에 대한 알림을 받을 수 있도록 하는 메커니즘입니다.

    중요! key-value observing을 이해하기 전에 key-value coding을 먼저 알고 계셔야 합니다. 



    한 눈에 보기

    Key-value observing은 다른 객체의 특정 프로퍼티들의 값이 변경될 때 알림을 받을 수 있는 메커니즘을 제공합니다. 이는 앱의 model과 controller layer간의 통신에 매우 유용하게 사용될 수 있습니다. controller object에서 주로 Model객체의 프로퍼티들을 옵저빙합니다. view 객체도 controller객체를 통해서 model객체의 프로퍼티들을 옵저빙하게 되구요. 그리고 model객체는 독립적인 값이 변할 때를 알기 위해서 다른 model객체를 옵저빙하거나 자신(self)를 옵저빙할 수도 있습니다. 


    프로퍼티 옵저버를 설정하는 데에 총 3단계가 있습니다. 이 세단계를 이해하는 것이 KVO의 작동을 이해하는데 가장 중요합니다.


    1. 먼저 여러분의 로직에서 KVO가 필요한지를 아셔야 합니다. 예를 들어, 다른 객체의 프로퍼티 값에 대한 변경이 있을 때, 특정 객체에 알림을 받을 수 있어야 하는 상황인지를 확인하셔야 합니다.

    예를들어 Person객체는 Bank객체의 accountBalance프로퍼티에 대한 모든 변경사항을 알고 싶어할 겁니다.


    2. Person객체는 Bank객체의 accountBalance라는 프로퍼티에 addObserver:forKeyPath:options:context: 메시지를 보내 옵저버를 등록해야 합니다.


    Note :  addObserver:forKeyPath:options:context:프로퍼티메소드는 여러분이 설정한 인스턴스간에서 관계가 만들어지는 것이지, 클래스간의 관계를 뜻하는 것이 아닙니다. 두 클래스간에는 관계가 만들어지지 않습니다.


    3. 값 변경에 대한 알림에 대한 처리를 위해 옵저버에서는 observeValueForKeyPath:ofObject:change:context:메소드를 구현해야 합니다. 이 메소드 내부에서 옵저버에서 값으 변화에 대해 어떤 처리를 할 것인지를 구현하게 됩니다. 메소드 내에 여러분의 커스텀 코드를 작성하시면 됩니다.

    Key-Value Observing을 등록하기에서 옵저빙 노티피케이션을 어떻게 등록하고 받게 되는지를 확인하실 수 있습니다.


    4observeValueForKeyPath:ofObject:change:context: 메소드는 관찰중인 객체의 프로퍼티의 값이 변경될 때 자동으로 호출됩니다.



    Registering Dependent Keys에서 특정 키 값과 다른 키의 값의 독립관계 설정에 대해서 알아보실 수 있습니다.

     (@property FullName이 있고 FullName이 FirstName+LastName으로 이루어진다고 가정해봅시다. LastName이 바뀌어도 FullName이 바뀌게 되죠? 이런 프로퍼티간의 독립관계 설정에 대해서 알아보실 수 있는겁니다!!.





    KVO가 갖는 가장 큰 장점은 값의 변경이 있을때마다 값 변경을 알리는 작업을 일일이 하지 않아도 된다는 것입니다. 잘 짜여진 KVO를 통해 여러분은 프레임워크를 사용하여 따로 코드를 추가하지 않아도 KVO를 사용하실 수 있습니다. 독립적인 값들 뿐만아니라 하나의 프로퍼티에도 여러개의 옵저버를 만들수도 있습니다.


    KVO Compliance에서는 automatic과 manual key-value observing에 대한 차이점과 이 둘을 구현하는 방법을 확인하실 수 있습니다.


    NSNotificationCenter를 사용하는 알림과 달리 Notificaiont에 대한 관리를 하는 center클래스가 따로 존재하지 않습니다. 이런 center클래스를 거치는 대신 change에 대한 notification이 다이렉트로 옵저버 객체에 전달이 되는 것입니다. 이런 역할을 하는 메소드들이 NSObject에 구현되어 있으므로 오버라이드를 해서 사용하시길 바랍니다.


    Key-Value Observing Implementation Details에서 key-value observing을 구현하는 방법을 확인하실 수 있습니다.



    댓글 2

Designed by Tistory.