Symbol Naming, 분쟁.

심볼이란 프로그래머가 결정하는 이름이라고 보자. 심볼 네이밍이란 이런 심볼의 이름을 짓는 작업이다. 소스코드에서 함수, 메소드나 변수 등의 네이밍을 보면 (다들 잘 아시겠지만) 몇 가지 특징으로 묶어진다.
  • 자바스러운 네이밍: 언더라인은 일체 쓰지 않고 대소문자로 붙여쓰는 스타일. 예를 들자면 SetThisValue 등등...
  • vc++에서 변수는 헝가리안 노테이션이 기본. 거기다 자바스럽게 이름을 짓는다. 예를 들자면 szText 등등...
  • 클래스는 대부분 대문자로 시작해서 소문자로 마무리하는 자바스타일: CFile(vc++ 스타일), SomeModule 등...
  • 소문자와 언더라인으로 구성되는 POSIX 스타일: C 표준 라이브러리나 C로 구현된 류, 혹은 Python이나 Ruby 의 일부 모듈의 메소드 등등. 예를 들어 fgets, some_action 등등...
  • 그 외에 대문자만 쓰거나 언더라인을 앞에 잔뜩 붙이는 등의 분류. 좀 특별하니 무시: 주로 상수나 typedef 정의 형태로 쓰이기도 하나 그건 역시 코더 마음.
이미 헝가리안 노테이션은 많은 이야기가 오고 갔지만, 이를 주로 쓰는 MS에서 조차도 안쓰는게 좋겠다는 말을 한 것으로 안다. 물론 출처 불명이고 특정 책에서 얻은 지식일 뿐이다. 개인적으로 생각하기에도 가독성을 해치는 주범이라고 생각한다. 그리고 철학(?)적으로도 맞지 않다. 간단한 이유로, 변수이름에 타입이 고정되어 버린다는 점이다. OOP에서는 변수도 객체이기에 이는 맞지 않기도 하지. 헝가리안 노테이션은 C++로 C스타일 코딩을 하게 되는 주범이다.

자바스러운 네이밍은 주로 메소드나 함수 네이밍에 많이 쓰인다. 그리고 자바뿐만 아니라 C++이나 각종 OOPL류에서 많이 쓰이고 있다. 공백을 따로 표현하지 않고 단어단위로 대소문자로 구분해서 붙여쓰기에 코딩 자체는 편하고 가독성도 나름 있다. 하지만 개인적으론 좀 싫어하는 스타일이다. 붙여서 쓰다 보니 가끔 헷갈리게 만드는 문자들 끼리 붙어서 곤혹스럽게 만들기도 한다. 그리고 이런 식으로 이름이 만든 경우 대체로 약자를 안쓰기에 이름이 길어진다. SetVariable 이라는 이름과 setvar(혹은 set_var) 라는 이름의 네이밍 차이는 명백하다.

클래스명의 네이밍은 대체로 거의 비슷한 듯 하다. 대문자C로 시작하는 헝가리안 스타일은 최악이라고 보지만 그 외에 대부분 자바스러운 스타일이 대체로 쓰인다. 굳이 불만은 없다.

C스러운 네이밍, 소문자와 숫자 그리고 언더라인으로 구성된 네이밍은 윈도우 계열에선 거의 안쓰이는 것 같다. vc++ 때문이겠지. 하지만 유닉스/리눅스 계열로 가면 갈 수록, 순수 C로 구성되어 있을 수록 이런 소문자 네이밍은 더 많이 쓰인다. 이런 네이밍의 특징은 함수 이름이 길어지지 않도록 약자를 많이 쓴다는 점이다. 그리고 붙여쓸 경우 모호함을 피하기 위해 언더라인을 간혹 쓴다. 개인적으론 약자 해석이 안될 때 불만이 있긴 하지만 가독성은 제일 좋다고 생각한다.

제목을 분쟁이라고 적었는데, 개인적으로 자바스러운 것과 C스러운 것 사이에서 종종 고민하기 때문이다. 물론 개인적인 기호는 C스러운 것이지만 다른 사람들이 자바스러운 것을 쓸 때를 생각해서 일부러 자바스럽게 쓰기도 한다. 그랬다가 고치기도 하고 (이클립스 리팩토링 기능 만세!)...

굳이 뭐가 좋다고 주장할 필요는 없겠지. 이런건 개인 기호로 남기거나 아니면 팀 회식(???)으로 결정해야 될지도 모를 사항이니깐.

그래도 역시 내 출신성분(...)으로 봐선 C스러운게 역시 최고다. ;ㅅ;

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://seorenn.egloos.com/tb/4320598 [도움말]

덧글

덧글 입력 영역