Quantcast
Channel: 돼지왕 왕돼지 놀이터
Viewing all articles
Browse latest Browse all 3732

[Effective Objective-C] #7 인스턴스 변수에 내부에서 접근할 때는 직접 접근하라.

$
0
0

 [Effective Objective-C] #7 인스턴스 변수에 내부에서 접근할 때는 직접 접근하라.


출처 : Effective Objective-C

break point, dispatch, effective objective-c, key value observing, kvo, lazy initialization, Objective-C, override, [Effective Objective-C] #7 인스턴스 변수에 내부에서 접근할 때는 직접 접근하라., 게터, 디버깅, 메모리 관리 시멘틱, 세터, 속도, 쓸 때 프로퍼티, 인스턴스 변수, 재정의, 초기화 메서드, 추천, 키 값 관찰, 프로퍼티


-

인스턴스 변수를 읽을 때는 직접 접근하고, 쓸 때는 프로퍼티를 사용하는 방법을 강력하게 추천한다.



-

인스턴스 변수에 직접 접근하는 방법이 확실히 빠르다.

이 방법은 Objective-C 의 메서드 호출(dispatch)를 사용하지 않는다.

컴파일러는 객체의 인스턴스 변수가 저장된 메모리에 직접 접근하는 코드를 만들어 낼 것이다.



-

직접 접근하는 방법은 세터에 정의된 메모리 관리 시멘틱을 무시한다.



-

인스턴스 변수에 직접 접근하면 키-값 관찰(key-value observing:KVO)  알림이 발생하지 않을 것이다.

이는 기대하는 객체의 동작 방식에 따라 문제가 될 수도, 안 될 수도 있다.



-

프로퍼티를 통해 접근하면 프로퍼티에 관련된 문제를 디버깅하기 쉽다.

게터나 세터에 중단점(break point)를 추가하여 누가, 언제 프로퍼티에 접근하는지 알 수 있기 때문이다.



-

앞의 두 장점을 모두 활용하는 방법은 인스턴스 변수를 설정할 때는 세터를 이용하고,

읽을 때는 직접 읽는 방법이다.

이렇게 하면 빠르게 인스턴스 변수를 읽을 수 있고, 프로퍼티를 통한 쓰기 제어를 여전히 사용할 수 있는 장점을 누릴 수 있다.



-

세터를 통해 쓰는 가장 큰 이유는 프로퍼티에 대한 메모리 관리 시멘틱의 동작이 보장되기 때문이다.

그러나 이 방법은 몇 가지 주의해야 할 점이 있다.



-

첫번째 주의할 점은 초기화 메서드 내에서 값을 설정할 때다.

이 메서드에서는 항상 인스턴스 변수에 직접 접근해야 한다.

하위 클래스가 세터를 재정의(override)할 수 있기 때문이다.



-

또 다른 주의할 점은 프로퍼티가 지연 초기화(lazy initialization)을 사용할 때이다.

이 경우에는 반드시 게터를 사용해야 한다.

그렇게 하지 않으면 인스턴스 변수는 절대 초기화될 기회를 얻지 못할 것이다.



-

기억할 점

     내부에서는 인스턴스 변수를 읽을 때는 직접 접근해 읽고, 반대로 쓸 때는 프로퍼티를 이용하라.


     초기화 메서드와 dealloc 에서는 항상 인스턴스 변수를 직접 읽고 쓰라.


     데이터(즉 인스턴스 변수)가 지연 초기화를 이용한다면 프로퍼티를 이용해 데이터를 읽어야 한다.


더보기



저작자 표시비영리변경 금지

Viewing all articles
Browse latest Browse all 3732

Trending Articles