iOS
[Swift] : KVC ( Key - Value Coding )
SeorinY
2022. 10. 11. 14:51
KVC ( Key - Value Coding ) 란 무엇일까?
객체의 프로퍼티에 접근할 때 사용하는 간접적인 코딩 방식이다.
객체의 프로퍼티에 접근하는 방식은 직접적인 방식과, 간접적인 방식으로 볼 수 있다.
직접적인 방식은 아래 코드처럼 우리가 흔히 사용하는 코딩 방식이다.
struct Human{
var name : String
var profile : Profile
}
struct Profile{
var job : String
}
var profile = Profile(job: "")
var seorin = Human(name: "", profile: profile)
//seorin 객체의 프로퍼티에 직접 접근을 함!!
seorin.name = "seorin"
seorin.profile.job = "Developer"
seorin.name //seorin
seorin.profile.job //Developer
이제 간접적인 방식인 Key-Value Coding 대해 알아보자.
Key Value Coding에는 Key를 사용하는 방법과 KeyPath를 사용하는 방법이 있다.
Key를 사용하는 코드를 살펴보자.
Key는 Object-C 의 문법이기 때문에 NSObject 클래스를 상속받고, 프로퍼티는 @objc를 사용해주도록 하자!
class Human : NSObject{
@objc var name : String
@objc var profile : Profile
override init(){
name = ""
profile = Profile()
}
}
class Profile : NSObject{
@objc var job : String
override init(){
job = ""
}
}
let profile = Profile()
let seorin = Human()
// 간접적으로 접근하는 방법 - Key
seorin.setValue("seorin", forKey: "name")
seorin.setValue(profile, forKey: "profile")
seorin.profile.setValue("Developer", forKey: "job")
seorin.value(forKey: "name") //"seorin"
seorin.profile.value(forKey: "job") //"Developer"
객체의 프로퍼티명을 Key 값으로 접근할 수 있다.
이제 KeyPath를 사용하는 코드를 살펴보자.
class Human{
var name : String
var profile : Profile
init(){
name = ""
profile = Profile()
}
}
class Profile{
var job : String
init(){
job = ""
}
}
let profile = Profile()
let seorin = Human()
// 간접적으로 접근하는 방법 - KeyPath
seorin[keyPath: \.name] = "seorin"
seorin[keyPath: \.profile] = profile
seorin[keyPath: \.profile.job] = "Developer"
seorin[keyPath: \.name] //"seorin"
seorin[keyPath: \.profile.job] //"Developer"
KeyPath를 저장하여 재사용하면 조금 더 편하게 사용할 수 있을 것이다.
세 방식 모두 같은 결과를 가져오고 있지만 KVC 방식을 사용했을 때 장점은 뭘까?
Key값이 런타임 중에 결정되기 때문에, 객체간의 의존도를 낮출 수 있고, 반복되는 코드를 줄일 수 있다.
그 외에도 KVO 를 사용하기 위한 이유가 있다!