[Effective Objective-C] #15 접두어를 사용해 네임스페이스 충돌을 피하라
출처 : Effective Objective-C
-
오브젝티브-C 는 내장(built-in) 네임스페이스 기능이 없다.
그렇기 때문에 일어날 가능성이 있는 충돌을 피하는 방법을 사용하지 않으면 이름은 쉽게 충돌한다.
앱에서 이름이 충돌하면 중복 심벌 에러(duplicate symbol error)가 발생하여 링크(link)가 되지 않는다.
-
링크가 안 되는 것보다 더 좋지 않은 상황은 중복된 것을 포함한 라이브러리 중 하나가 실행 시간에 로딩되었을 때다.
이 경우 동적 로더(dynamic loader)는 중복 심벌 에러와 마주치게 될 것이다.
그리고 아마도 전체 앱이 다운될 것이다.
-
이 문제를 피하는 한 가지 방법은 간단한 형태의 네임스페이스를 사용하는 것이다.
그 방법은 특정 접두어를 여러분이 만드는 모든 이름 앞에 붙이는 것이다.
접두어는 회사나 앱에 관련 있는 것을 골라야 한다.
-
접두어를 사용하더라도 여전히 충돌 가능성이 없지는 않지만 훨씬 줄어들 것이다.
-
코코아를 사용해 앱을 만든다면 애플이 모든 두 글자 접두어 사용을 예약했다는 사실을 알고 있어야 한다.
그래서 반드시 세 글자 접두어를 사용해야 한다.
-
접두어는 클래스에만 붙이면 안 되고 앱 내 모든 이름에 붙여야 한다.
-
중요하지만 가끔 간과되는 또 다른 잠재적인 충돌은 순수 C 함수 또는 여러분 클래스의 구현 파일 내에서 사용하는 전역 변수에서 발생한다.
이것들이 컴파일된 오브젝트 파일에서 최상위(top-level) 심벌로 보인다는 사실을 잊어버리기 쉽다.
-
구현 파일에 정의되어 있고, 헤더 파일에 선언되어 있지 않는데도 순수 C 함수는 최상위 심벌로 보인다.
이런 경우 컴파일 시에 링크 할 수 없다는 중복 심벌 에러를 볼 수 있다.
더 안 좋은 것은 다른 앱에서 사용할 수 있도록 여러분의 코드를 라이브러리로 배포했을 때다.
그래서 C 함수 역시 접두어를 항상 붙여야 한다.
-
접두어를 붙여서 구체화시켜 놓으면 백트레이스에서 이 심벌을 쉽게 볼 수 있으므로
어디서 문제가 발생했는지 쉽게 밝힐 수 있는 부가 효과도 있다.
-
서드 파티 라이브러리를 사용하는 여러분의 코드를 다른 앱이 사용하도록 배포할 때는 중복 심벌 문제를 특별히 주의해야 한다.
-
전체 코드를 뒤지면서 모든 이름을 변경하는 것은 매우 지루한 일처럼 보이지만 이름 충돌을 피하려면 신중해야 한다.
스스로에게 다음과 같이 물어볼 수 있다.
모든 이름을 변경하는 것이 과연 필요한지
충돌이 일어나는 Library 를 포함하지 않고 그냥 구현하여 사용하면 안 되는지.
다른 세 번째 라이브러리를 사용할 가능성은 없는지?
기억할 점
회사와 앱 모두에 어울리는 클래스 접두어를 고르라.
그리고 코드 전반에 걸쳐 사용하라.
자신의 라이브러리에서 서드 파티 라이브러리를 사용한다면 그 라이브러리의 이름에 자신의 접두어를 붙여라.
'프로그래밍 놀이터 > iOS' 카테고리의 다른 글
[Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #9 ~ #16 (0) | 2017.08.19 |
---|---|
[Effective Objective-C] #16 지정 초기화 메서드를 만들라 (0) | 2017.08.18 |
[Effective Objective-C] #14 클래스 객체가 무엇인지 이해하라 (0) | 2017.08.16 |
[Effective Objective-C] #13 불투명 메서드를 디버깅할 때 메서드 스위즐링을 사용하라 (0) | 2017.08.15 |
[Effective Objective-C] #12 메시지 포워딩을 이해하라 (0) | 2017.08.14 |
댓글