콘텐츠로 건너뛰기
Home » 프로퍼티

프로퍼티

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

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

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

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

(파이썬) 약한 참조 사용하기

파이썬과 C를 비교하면서 차이점을 이야기하는 사람 중에는 “파이썬은 별도의 메모리 관리가 필요없다”는 이야기를 하는 사람들이 있다. 실제로 프로그램이 실행되는 동안 객체를 위한 메모리는 파이썬에 의해 자동으로 할당받게 되고, 객체의 파괴 역시 대부분 파이썬이 자동으로 처리한다. 따라서 파이썬 코드에서는 malloc()이나 free() 같은 메모리 관리를 위한 코드가 존재하지 않는 것은 사실이다.

파이썬에서 메모리 관리에 있어 가장 주요한 개념은 참조수인데, 참조수는 어떤 객체 외부에서 그 객체를 참조하는 지점의 개수이다. 즉 어떤 객체를 누군가 참조한다는 것은, 외부의 누군가가 그 객체가 계속 살아있기를 원한다는 의미이므로 그 수명을 유지하게 하며, 반대로 이러한 참조점이 없는 객체는 사용할 수 없는 객체가 되기 때문에 파괴되어도 상관없다는 의미가 된다.

파이썬의 모든 것은 객체이고, 모든 파이썬 변수는 객체에 붙는 이름이다. 즉 객체에 어떤 이름이 붙었다는 것은 이 객체를 참조하는 곳이 한 군데 생겼다는 뜻이다. 그 외에 객체가 다른 객체의 속성으로 바인딩되는 것도 참조수를 늘리는 것이며, 리스트나 사전과 같은 컨테이너에 포함되는 것도 참조수가 증가하는 효과를 갖는다.

만약 그 이름이 다른 객체를 가리키도록 바뀌게 되면, 파이썬은 내부적으로 참조수를 1 떨어뜨린다. 그리하여 참조수가 0이된 객체는 그냥 그 자리에서 즉시 파괴되는 식이다. 그러니, 별도로 사용하지 않는 객체를 명시적으로 파괴하는 코드를 호출할 필요가 없는 것이다. 하지만 세상 일이란게 단순해보이더라도 그게 늘 마음처럼 한결같지는 않은 법이다. 이러한 참조수에 의한 메모리 관리가 실패할 수 있는 경우와, 그럼 문제를 어떻게 해결할 수 있는지를 살펴보도록 하자.

더 보기 »(파이썬) 약한 참조 사용하기

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 프로퍼티의 접근자 메서드

[Objective-C] 키밸류 코딩

객체는 그 내부에 어떤 값을 저장하고, 접근자(accessor)라 불리는 메소드를 통해서 이 값에 접근한다. Objective-C에서는 내부 변수(ivar라 한다)와 그에 대한 접근자 메소드를 합쳐서 “프로퍼티”라는 개념으로 다룬다. 이 때 프로퍼티의 이름을 나타내는 문자열을 키(key)로 하여 그 값에 액세스하는 것을 키-밸류 코딩이라고 한다. 즉, 어떤 객체 내부의 값에 접근하려 할 때, 접근자 메소드를 호출하는 것이 아니라, 그 프로퍼티의 이름을 나타내는 문자열값을 사용하여 객체의 프로퍼티 값을 간접적으로 읽거나 쓰는 것을 말한다. 키밸류 코딩은 코코아에서 제공하는 여러 가지 기술을 사용하기 위한 전제 조건이기도 하다. 따라서… 더 보기 »[Objective-C] 키밸류 코딩