Core Foundation, Audio Unit 등의 Core Framework 을 사용할 경우, 'k' 로 시작하는 Constants 를 보게 되는데 Core Foundation Design Concepts 문서를 보면 Naming Conventions 항목에 "(An exception to this convention are constants, which put "k" before the type prefix)" 와 같이 Constants 에 대한 설명이 있다. 그렇다면, 사용자 프로젝트에서도 Constants 정의 시에 'k' prefix 를 사용하여 이름을 정하면 되는 걸까?
왜 'k' prefix 인가
Core Foundation 등의 Core Framework 헤더파일들을 보면, 헝가리언 네이밍 규칙을 따른 흔적들을 제법 볼 수 있다. 일단 'k' 는 헝가리언 네이밍에 따라 사용된 걸로 보인다. Constants 의 'c' 는 이미 헝가리안에서 'char' 의 'c' 로 예약이 되어 있는 상황이니 중복을 피하기 위해 동일한 발음기호인 'k' 를 사용한 것으로 추측된다. Core Foundation 의 역사를 고려하면 헝가리언 네이밍을 따른것이 어느정도 이해가 된다.
Coding Guidelines for Cocoa vs. Google Objective-C Guide
Coding Guidelines for Cocoa 의 Constants 항목을 간략히 정리하면, 그룹이나 연관된 Integer Values 의 경우 Enumeration 을 사용하고 2~3개의 대문자로 이루어진 prefix 로 시작되는 Class Name 정의를 따르는 "Naming Functions" 규칙을 따라 정의한다. 일단, 가이드라인 자체가 Hungarian Notation 을 따르지 않으며 어디에도 'k' prefix 에 대한 내용은 없다.
반면, Open Source Project 작성 시 기준을 위한 Google Object-C Guide 에서는 Constants 의 경우 'k' prefix 를 사용해야 한다고 명시되어 있다.
Class/Function Name 과 동일한 Prefix 를 사용하면, 해당 Constants 와 연관되는 네임스페이스 파악이 용이하다.
반면, 'k' prefix 를 사용할 경우에는 해당 Value 가 Constant 라는게 바로 파악이 가능하다.
결론
개인적으로는 Constants 정의 시에는 'k' prefix 사용을 배제하고 애플의 공식 문서 Coding Guidelines for Cocoa 를 따라 정의 되어야 한다고 본다. Open Source 들을 보면, 'k' prefix 를 사용한 프로젝트도 제법 보이나, 최근의 프로젝트들은 전자인 Coding Guidelines for Cocoa 의 Constants 네이밍 규칙을 따르고 있다. 'k' prefix 는 Core Frameworks 의 오랜 역사로 묻어두자.
AudioUnitProperties.h [AudioUnit.framework]
enum { kAudioUnitScope_Global = 0, kAudioUnitScope_Input = 1, kAudioUnitScope_Output = 2, kAudioUnitScope_Group = 3, kAudioUnitScope_Part = 4, kAudioUnitScope_Note = 5, kAudioUnitScope_Layer = 6, kAudioUnitScope_LayerItem = 7 };
#define kAUPresetVersionKey "version" #define kAUPresetTypeKey "type" #define kAUPresetSubtypeKey "subtype"
왜 'k' prefix 인가
Core Foundation 등의 Core Framework 헤더파일들을 보면, 헝가리언 네이밍 규칙을 따른 흔적들을 제법 볼 수 있다. 일단 'k' 는 헝가리언 네이밍에 따라 사용된 걸로 보인다. Constants 의 'c' 는 이미 헝가리안에서 'char' 의 'c' 로 예약이 되어 있는 상황이니 중복을 피하기 위해 동일한 발음기호인 'k' 를 사용한 것으로 추측된다. Core Foundation 의 역사를 고려하면 헝가리언 네이밍을 따른것이 어느정도 이해가 된다.
Coding Guidelines for Cocoa vs. Google Objective-C Guide
Coding Guidelines for Cocoa 의 Constants 항목을 간략히 정리하면, 그룹이나 연관된 Integer Values 의 경우 Enumeration 을 사용하고 2~3개의 대문자로 이루어진 prefix 로 시작되는 Class Name 정의를 따르는 "Naming Functions" 규칙을 따라 정의한다. 일단, 가이드라인 자체가 Hungarian Notation 을 따르지 않으며 어디에도 'k' prefix 에 대한 내용은 없다.
반면, Open Source Project 작성 시 기준을 위한 Google Object-C Guide 에서는 Constants 의 경우 'k' prefix 를 사용해야 한다고 명시되어 있다.
일단, 위 두가지 가이드라인에서 Prefix 를 제외하고 나머지 이름에 Camel-Case 가 적용이 되는 것은 동일하다. 문제는 상반되게 기술된 Prefix 사용법이다.
Class/Function Name 과 동일한 Prefix 를 사용하면, 해당 Constants 와 연관되는 네임스페이스 파악이 용이하다.
반면, 'k' prefix 를 사용할 경우에는 해당 Value 가 Constant 라는게 바로 파악이 가능하다.
결론
개인적으로는 Constants 정의 시에는 'k' prefix 사용을 배제하고 애플의 공식 문서 Coding Guidelines for Cocoa 를 따라 정의 되어야 한다고 본다. Open Source 들을 보면, 'k' prefix 를 사용한 프로젝트도 제법 보이나, 최근의 프로젝트들은 전자인 Coding Guidelines for Cocoa 의 Constants 네이밍 규칙을 따르고 있다. 'k' prefix 는 Core Frameworks 의 오랜 역사로 묻어두자.
반응형
댓글