KVO [ Key Value Observing ]
정의
- A객체에서 B객체의 키의 값이 변화됨을 감지할 수 있는 패턴입니다.
- 객체의 프로퍼티의 변경사항을 다른 객체에 알리기 위해 사용하는 프로그래밍 패턴입니다.
- 객체와 객체 사이의 관계를 다룰 때 적합합니다.
- 메서드나 다른 액션에서 나타나는 것이 아닌, 프로퍼티의 상태에서 반응하는 형태입니다.
예제
- NSObject를 상속받은 SomeClass 클래스 정의합니다.
- value라는 프로퍼티 앞에 dynamic키워드 사용해 dynamic dispatch를 활성화시킵니다.
- 옵저버를 넣기 위한 observe( ) 메서드를 사용합니다.
- 해당 오브젝트에서 키패스로 지정된 프로퍼티의 값이 바뀌면 클로져가 호출됩니다.
- observe( ) 명령으로 someObject의 value 프로퍼티의 값 변화를 감지하며, observe 안에 print문이 출력됩니다.
class SomeClass: NSObject {
@objc dynamic var value: String = ""
}
let someObject = SomeClass()
someObject.observe(\.value) { (object, change) in
print("SomeClass object value changed to \(object.value)")
}
someObject.value = "test" // TEST
동작 방식
- 변수에 코드를 붙여 변수가 변경될 때마다 코드가 실행되도록 하는 방법입니다.
- Property observers와 아주 유사하지만 KVO는 타입 정의 밖에서 observe를 추가한다는 점이 다릅니다.
- NSObject를 상속받기 위해 @objc를 반드시 붙여줘야 합니다.
- 특히 KVO 패턴은 속성 각각에 @objc dynamic 키워드를 붙여줘야 합니다.
장점
- 두 객체 간 동기화 가능, (Model과 View와 같이 논리적으로 분리된 파트 간의 변경사항을 전달하여 동기화가 가능)
- 객체의 구현을 변경하지 않고 내부 객체의 상태 변화에 대응할 수 있음
- 관찰된 프로퍼티의 이전 값(oldValue)과 최신 값(newValue)을 제공
- 따로 옵저버를 해제하지 않아도, 시스템이 알아서 옵저버를 제거해줌(removeObserver)
- KeyPath를 사용하여 프로퍼티를 관찰하므로, nested 프로퍼티도 관찰 가능
- 다음 코드는 5번에 해당하는 내용으로 person 인스턴스에서 \.address.town 이런 형식으로 관찰도 가능하다는 의미.
class Address: NSObject {
@objc dynamic var town: String
init(town: String) {
self.town = town
}
}
class Person: NSObject {
@objc dynamic var address: Address
init(address: Address) {
self.address = address
}
}
출처: https://zeddios.tistory.com/1220 [ZeddiOS]
단점
- NSObject 상속해야 함(Objective-C 런타임에 의존하게 됨)
- NSObject를 상속받는 객체에서만 사용이 가능
- 많은 value를 감지할 때는 많은 조건문이 필요
- dealloc(할당 해제)될 때 옵저버를 지워줘야 합니다.
내용 출처
https://zeddios.tistory.com/1220
Key-Value Observing(KVO) in Swift
안녕하세요 :) Zedd입니다. 오늘은 KVO에 대해서 공부! # KVO - Key-Value Observing의 약자 - 객체의 프로퍼티의 변경사항을 다른 객체에 알리기 위해 사용하는 코코아 프로그래밍 패턴 - Model과 View와 같
zeddios.tistory.com
KVO 동작 방식에 대해 설명하시오.
KVO KVO는 A객체에서 B객체의 키의 값이 변화됨을 감지할 수 있는 패턴입니다. 위의 두 패턴이 주로 Controller와 다른 객체 사이의 관계를 다룬다면, KVO 패턴은 객체와 객체 사이의 관계를 다룰 때 적
velog.io
https://www.zehye.kr/ios/2020/03/19/11iOS_KVO/
KVO(Key Value Observing)란 무엇인가? · 지혜의 개발공부로그
KVO(Key Value Observing)란 무엇인가? 19 Mar 2020 | iOS 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다. KVO(Key-Value Observing) 특정 키의 값의 변화를 감지하기 위한 기능 모
www.zehye.kr