(Swift) Property

Swift의 Property 객체 인스턴스는 그 내부에 어떠한 상태를 저장하기 위한 저장공간을 가질 수 있는데, 객체의 외부에서는 기본적으로 이 상태를 저장하는 스토리지를 액세스할 수 없다. 따라서 객체를 디자인하는 시점에 외부에서 어떠한 상태값을 읽거나 쓰도록 하려면 객체 외부에서 액세스할 수 있도록 하는 API가 필요하다. Objective-C에서는 이러한 API를 “프로퍼티”라 정의하고 클래스 내 특정 멤버에 대해서 getter, setter를 정의해서 특정 멤버의 값을 읽거나 쓸 수 있게끔했다. Swift에서는 인스턴스 멤버와 접근자 메소드라는 분리된 개념자체를 아예 프로퍼티라는 개념으로 통합했다. 프로퍼티는 크게 저장 프로퍼티(stored property)와 계산 프로퍼티(computed property)로

Objective-C의 선언 프로퍼티 (Declared Property)에 대해

Objective-C의 객체 인스턴스에 어떠한 변수 값을 포함하고자 한다면 클래스 내에 인스턴스 변수를 선언하고, 여기에 값을 저장할 수 있다. (흔히 애플 문서등에서는 이런 인스턴스 변수를 ivar라 한다.) 기본적으로 객체의 내부에서 선언되는 인스턴스 변수는 private하며 객체의 외부에서는 내부의 인스턴스 변수값에 액세스하는 것이 차단된다. 따라서 객체의 외부에서 인스턴스 변수의 값을 읽거나 쓰기 위해서는 클래스가 해당 인스턴스를 읽게하거나, 쓰게 해주는 API를 제공해야 한다. 이렇게 객체가 자신의 내부 속성값에 대해 읽거나 쓰게 하기 위해 제공하는 메소드를 접근자(accessor) 메소드라고 한다.

atomic 프로퍼티의 접근자 메서드

많은 iOS책들에서 프로퍼티는 대부분 nonatomic 속성으로 지정한다. 이 때 nonatomic은 항상 명시하는데, 이는 Objective-C에서 프로퍼티의 디폴트는 atomic이기 때문이다. 그런데 이게 정말, nonatomic이어야 하기 때문에 이렇게 하는 것인지, 맞는 것인지는 좀 아리송한데… atomic은 예전에도 한 번 설명한 적이 있는데, 접근자를 호출한 스레드에서 그 프로퍼티를 읽거나 쓰는 중간에는 다른 스레드나 큐에서 액세스 하지 못하도록 한다는 의미이다. 따라서 멀티 스레드나 백그라운드 작업을 염두에 둔다면 atomic 속성에 대해서도 고려를 해야 한다는 의미이다. 어떤 스레드에서 객체의 프로퍼티에 접근할 때 다른 스레드에서의 접근을 막는 것을 공교롭게도

[Cocoa] 키밸류 코딩에 대한 오해와 진실

키 밸류 코딩은 코코아 프레임워크의 핵심적인 요소 중 하나로, 상당히 많은 코코아 프레임워크의 구성 요소들이 이 특성에 의존하고 있다. 특히 키-밸류 옵저빙, 코어데이터 및 코코아 바인딩 등 코딩의 수고스러움을 비약적으로 줄여주는 기술들이 이에 기반하고 있다. 키 밸류 코딩도 그 자체로는 너무나 간단한 개념이라 그런지, 프로퍼티 선언 등의 Objective-C 언어 자체의 기능과 혼동하는 글들이 많아서 정리해 본다.