어쩌다보니 iOS 개발자

3. 전처리기 #define 보다는 타입이 있는 상수를 사용하라 본문

iOS 개발/이펙티브 오브젝티브-C

3. 전처리기 #define 보다는 타입이 있는 상수를 사용하라

엔디엘(no Dream no Life) 2017. 9. 13. 14:51


보통 뷰 지속시간 또는 반복 횟수 등을 정의할 때 상수를 사용한다. 


#define ANIMATION_DURATION 0.3 


define은 전처리 지시어로써 ANIMATION_DURATION의 문자열에 발견될 때 마다 0.3으로 치환할 것이다.

그리고 헤더파일에 선언을 한다면 그 헤더파일이 사용되는 모든 곳에서 치환을 할것이다.


이 문제를 해결하기 위해서는 컴파일러를 활용해야 한다.


예를 들면 1. 상수로 정의를 하여 static const NSTimeInterval kAnimationDuration = 0.3;

타입 정보 NSTimeInterval 를 본다면 정확히 이 상수가 무엇을 의하는지 확실히 알 수있다.


이러한 습관은 코드를 읽는데 많은 도움이 되며, 하나의 좋은 습관으로 자리 잡을 것이다.



2. 만약에 외부로 노출할 필요가 없는 상수는 구현파일에 정의한다.

오브젝티브-C는 네임스페이스라는 개념이 없기 때문에 전역변수로 정의되므로, 외부로 노출시키길 원치 않다면 구현파일에 정의하여라.



3. static, const 둘 다 이용해 선언하라.


const 식별자는 해당 변수의 값을 변경하려고 하면 컴파일 오류를 발생시킨다. 값의 변경을 허용하지 않는다.

static 식별자는 지역변수라는 것을 의미한다. 

만약 static 을 사용하지 않으면 외부 심벌로 고려하여 똑같은 이름을 가지고 다른 객체에서 선언한다면 에러를 일으킬 것이다.


Comments