Home » property

property

Swift 프로퍼티의 옵저버에 대한 규칙

lazy 프로퍼티는 옵저버를 가질 수 없다. (단 최초 액세스 이후 변경하는 것은 가능하다.) computed 프로퍼티에 대해서는 옵저버를 설치하는 것이 의미가 없다. 단 상속받은 computed 프로퍼티에 대해서는 옵저버를 설치할 수 있다. 옵저버는 해당 클래스의 지정 이니셜라이저 내에서 값을 변경하는 경우에는 호출되지 않는다. 단, 상속받은 프로퍼티가 옵저버가 설치되어 있다면 부모의 지정 이니셜라이저 호출 후에 변경한다면, 부모의 옵저버가 호출될 것이다. 비슷하게 편의 이니셜라이저에서는 지정 이니셜라이저를 통해 초기화한 후, 프로퍼티값을 다시 변경하면 옵저버가 실행된다. lazy 프로퍼티와 옵저버 lazy 프로퍼티는 옵저버를 가질 수 없다. 위에서… 더 보기 »Swift 프로퍼티의 옵저버에 대한 규칙

프로퍼티 상속 파고들기 – Swift

Swift 컴파일러는 클래스의 상속과 관련하여 이런 저런 여러가지 제약 사항들을 가지고 있다. 이는 클래스의 상속 관계는 자칫 매우 복잡한 문제로 발전할 수 있으며, 사람은 이 문제와 관련해서 너무나 관대하여 자신이 실수했다는 사실을 알아차리기 힘들다는 경험적 사실 때문이다. 그래서 “이렇게 하면 되겠지”하는 코드들이 유독 클래스 상속과 관련해서는 뜻대로 되지 않는 경우가 많다.

이 글에서는 상속의 관점에서 프로퍼티는 어떤 제약을 받는지, 헷갈리는 몇 가지 사례들과 함께 점검해보도록 하자.

더 보기 »프로퍼티 상속 파고들기 – Swift

Swift의 프로퍼티에 대한 이해

프로퍼티(property)는 직역하자면 “재산”, “소유물” 등으로 번역되는데, 보통은 속성이라고 번역하여 쓰는 것이 일반적이다. (“속성”이라는 의미의 attribute와 혼동이 있을 수 있지만, 일단 언어의 기능으로 한정했을 때에는 크게 상관은 없을 것 같다.) 프로퍼티는 클래스나 구조체 혹은 열거체(enum 타입)의 객체 인스턴스가 그 내부에 가지고 있는, 객체의 상태에 관한 정보를 말한다. 이렇게 말하면 Swift의 프로퍼티는 마치 C 구조체의 멤버 변수와 다름 없다고 생각될 수 있는데, 조금 차이가 있다. Swift의 프로퍼티 개념은 Objective-C의 선언 프로퍼티의 개념을 이어 받은 것이라 볼 수 있다. 따라서 프로퍼티에 대해 생각할… 더 보기 »Swift의 프로퍼티에 대한 이해

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

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

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

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

키밸류 코딩이란

NSObject는 Objective-C의 표준 라이브러리라 할 수 있는 Foundation에서 가장 기본이 되는 최상위 클래스에 해당한다. 커스텀 클래스를 만들 때 아무 생각없이 상속받는 이 클래스는 Objective-C에서 클래스라는 것이 마땅히 갖추어야 하는 여러 가지 기능들을 미리 구현해둔 것이 아주 많이 있다. 그 중에서도 키밸류 코딩이라는 기술을 위한 기본적인 기능이 NSKeyValueCoding이라는 비정규 프로토콜에 정의되어 있고, NSObjects는 이를 따르고 있다. 따라서 몇가지 간단한 규칙을 지키면서 프로퍼티를 정의하기만 하면, 우리가 작성하는 모든 클래스의 프로퍼티들이 키밸류 코딩 호환이 될 수 있다. 그렇다면 키밸류 코딩은 무엇이고, 또 어떻게… 더 보기 »키밸류 코딩이란