티스토리 뷰


Key-Value Coding Programming Guide - Getting Started - About Key-Value Coding

Getting Started - about KVC(Key-Value Coding) 

키-밸류 코딩이란 문자열(키)를 사용하여 객체의 인스턴스변수에 간접적으로 접근해서 값을 수정하거나 얻을 수 있는 방법. 이 방법을 사용하면 코드 가독성을 올리고, 코드 양도 줄일 수 있다. 또한 객체를 동적으로 결합할 수도 있다.

- 방식
기본적으로 접근자 메소드(getter, setter)나, 선언된 프로퍼티를 사용하고, 인스턴스 변수가 있다면 그 이름을 키로 사용해서 접근할 수 있다.

- 간접적인 이유(objective - c 맥과 이아폰 애플리케이션 프로그래밍, 오기하라 타케시)
1. 키가 되는 문자열은 런타임에 결정되어도 무방
2. 프로퍼티로 접근하는 구체적인 방법에 대해서는 이용하는 측에서는 알지 못함

- 장점
기존 방법으로는 프로퍼티가 증가하면 그에 따른 코드가 증가한다 (getter나 setter, property와 synthesize를 이용하더라도 그 문구를 추가해야 한다.) 하지만 KVC는 그렇지 않아도 된다.
- 코드 가독성을 올리고, 코드 양도 줄일 수 있어 코드가 간단해 진다.

또한 KVC는 KVO(Key-Value observing), Cocoa bindings, Core Data, AppleScript을 공부하기 위한 선수지식!

- Using Key-value coding compliant Objects
NSkeyValueCoding에서 관련된 메소드를 가지고 있고, NSObject가 NSkeyValueCoding을 채택해서 필수 메소드에 대한 기본적인 구현을 해놨습니다. 따라서 NSObject로 부터 직간접적으로 상속받은 객체들은 기본적인 구현없이 기본적인 KVC를 사용가능합니다.

1. Access object properties ( related to Accessing Object Properties )
문자열(키)값으로 해당 오브젝트 프로퍼티에 접근해서 set(setValue:forKey:)과 get(valueForKey:) 이 가능합니다.

2. Manipulate collection properties. ( related to Accessing Collection Properties )
접근 메서드의 기본 구현으로도 다른 프로퍼티를 다루듯이 NSArray와 같은 콜렉션 객체도 다룰 수 있습니다.
이거 외에도 객체가 콜렉션 접근자 메소드를 적절하게 구현한다면, KVC가 콜렉션의 요소에 접근 할 수 도 있습니다. 이런 방법이 직접적으로 접근하는 것보다 효율적이고, 이렇게 하면 표준화된 인터페이스로 custom collection objects를 다룰 수 있습니다.

Collection accessor methods를 만들면, collection properties의 요소에  kvc로 접근가능하고, custom collection objects를 가능하게 한다. 표준화된 인터페이스를 통해서

3. Invoke collection operators on collection objects. ( related to Using Collection Operators )
KVC에서 문자열(키)에 collection operators를 집어 넣어서 실행할 수 있다.

4. Access non-object properites ( representing Non-object values)
KVC는 기본적으로 스칼라나 스트럭쳐러럼 object가 아닌 프로퍼티도 찾아낸다. 그리고 wrapping이나 unwrapping해서 object를 만들어서 쓴다. ex) int -> NSNumbe 
그거 이외에도 KVC는 object가 아닌 프로퍼티에 nil이 들어갔을 때 처리해줄 메소드도 있다.

5. Access properties by key path
object에 여러 프로퍼티가 엮여 있을 때 key path를 사용해서 KVC를 할 수 있다.

- Adopting Key-Value Coding for an Object
custom 객체에 KVC를 구현해야 할 경우에 비공식 프로토콜인 NSKeyValueCoding를 적용해야하고 해당하는 메소드를 구현해야합니다. 기본적으로 valueForKey:, setValue:forKey: 등이 있습니다. 다행이도 NSObject에는 이것들이 기본으로 구현돼 있어서(default) NSObject를 상속받거나 상속받은 객체를 상속받으면 대부분 다 구현돼 있있을 겁니다.
그렇다 해도 기본적으로 메서드와 인스턴스 변수가 잘 정의돼 있어야 default 메소드가 잘 작동합니다.

그 다음에 선택적으로 key값 유효인증을 위한 메소드나 특별 케이스(유효하지 않는 키나, nil 등)를 다루기위한 메소드를 통해서 key-value coding을 사용자화(customize)할 수 있습니다.


- Key-Value Coding with Swift

swift 객체가 NSObject나 NSObject를 상속받은 객체를 상속받으면 기본적으로 KVC를 쓸 수 있습니다. 
(상속 받지 않아도 쓸 수 있게 변경됐고, 스위프트의 문법으로 사용가능합니다.)
반면 objc는 그렇지 않습니다, 프로퍼티 접근자와 인스턴스 변수는 특정한 패턴을 따라야만 합니다.
스위프트에서는 이런 것을 안해도 알아서 해줍니다.
게다가 프로토콜(NSKeyValueCoding)의 기능들은 스위프트와 관련이 없거나 스위프트 기술을 사용하여 잘 처리 됩니다. 
예를들면 스위프트 프로퍼티들은 객체이기 때문에 non-object properties를 따로 안 해줘도 됩니다.
그래서 이 가이드에서는 obcj에 초첨을 맞춥니다. KVC를 하기위해서 스위프트보다 많은 걸 해야하고 objc에서 더 유용하기 때문입니다. 
그래도 objc에서와 다르게 접근해야 하는 경우에는 따로 안내하겠습니다



반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함