본문 바로가기

1.관리 및 아키텍처/Architecture

코딩 스타일

파스칼, 카멜, 헝가리안, Underscore

작성:http://ospace.tistory.com/(ospace114@empal.com) 2008.12.19

명명 규칙은 일정한 형식의 코드 표기 방법이다. 물론 여러가지 정의가 있을 수 있지만, 인간이 쉽게 인지하고 읽을 수 있는 형식으로 표기하기 위한 것이다. 일단 적어도 난 이렇게 본다.

일정한 코딩 스타일을 작성하면 나중에 읽기가 쉬워지고, 읽기가 쉬워지면 수정도 쉬워진다. 즉, 유지보수가 쉬워진다는 의미이다. 그렇다고 누워서 떡먹기는 아니다.

먼저 대표적인 코딩 스타일을 살펴보고, 이런 규칙을 적용하기 위한 세부적인 프로그래밍 항목을 살펴보겠다.

코딩 스타일

파스칼(Pascal)

단어와 단어를 공배없이 연결하고 각 단어의 첫 글자를 대문자로 표시한 방식이다.

ex) HandBook, UserName

카멜(camel)

읽기에는 카멜이지만 영어 발음은 캐멀이다. 캐멀로도 사용된다. 파스칼과 비슷하지만, 문장의 첫 글자는 소문자로 사용한다.

ex) handBook, userName

헝가리안(Hungarian)

카멜식 표기법을 사용하는데 약간 다르다. 명칭 앞에 해당 자료형을 소문자 약자로 붙인다. Microsoft에서 처음시작해서 널리 퍼졌다. 그러나 현재 대부분 이를 기피하고 있다. MS도 지양하고 있다.

ex) pHandBook (p: 포인터), sUserName(s: 문자열)

추가로 헝가리안은 OOP 개념도 지원하여 멤버함수와 멤버 변수에 대한 표기법도 따로 존재한다.

ex) m_pHandBook, m_sUserName

그외로

ex) g_nCount (정수형이며 전역변수), s_wheel (스태틱 변수)

밑줄(Underscore)

모든 단어는 소문자로 표시하고 각 단어는 밑줄("_")로 연결한다. 헝가리안 처럼 자료형에 표시는 없다.

ex) hand_book, user_name

간혹 typedef문에 의한 선언인 경우 맨 끝에 "_t"가 덧붙여질 수 있다.

ex) hand_book_t

최근 가급적 풀어쓴 변수명을 많이 사용하며, 전역 변수인 경우 특히 더 잘 풀어쓰는 경향이 있다. 그렇다고 몇십글자로 만들지는 않는다.

모두 대문자

이 형식은 특별하게 사용되는 것이 아니고 특수한 경우에 사용된다. 예를 들어 상수 값이나, 약어 들이다. 그리고 단어 사이는 밑줄("_")로 연결하여 구분한다.

ex) PI, MAX_INT, UI (user interface)

적용할 항목

아래 개개 항목에 대해 어떤 코딩 스타일을 적용할 것인가를 지정하면 된다.

  • 네임스페이스(namespace)
  • 클래스(class)
  • 예외(exception)
  • 속성(property)
  • 함수(function)
  • 변수(variable)
  • 인자(parameter)
  • UI 컨트롤(control)
  • 열거형(enum)

즉, 네임 스페이스는 파스칼식, 변수와 인자는 카멜식을 사용한다.
아니면 구체적으로 네임 스페이스는 단어는 연결하여 붙이고 첫글자만 대문자로 표기한다.
전자가 깔금하긴 하다. ^^

다음은 스타일과 상관은 없지만 프로그래밍 코딩 규칙 범부에서 다뤄야할 항목이다. 앞의 스타일 이외에 이름을 어떤식으로 만드는가하는 것도 포함되었다.

  • 네임스페이스 명명 방법
  • 클래스 명명 지침
  • 인터페이스(interface) 명명 방법
  • 속성 명명 지침
  • 열거형(enum) 명명 지침
  • 전역 변수 명명 지침
  • 정적 필드 명명 지침
  • 메서드 명명 지침
  • 이벤트 명명 지침
  • 약어 표시 방법
  • 값 유무 확인 방법
  • 값 획득과 변경 방법
  • 정의형(typedef) 명명 방법

좀더 세부적으로 들어 가면, 클래스나 함수 명명 방법을 지정할 수도 있다. 예를 들어 클래스 명은 명사형이나 명사구로 사용할 것, 함수는 동사나 동사구 형태로 사용할 것등이 있다. 그리고 밑줄 사용여부를 엄격하게 사용을 제한 혹은 권장할 수 있다.

그리고 예전에 클래스 명에 "C"라는 이니셜 문자를 추가했는데, 이를 절대로 사용하지 말라라고 지정할 수도 있습니다.

예를 들어 네임스페이스는 회사명.솔루션명.종류 순으로 사용하라.

인터페이스는 특수한 클래스이므로 다른 클래스와 구분하기 위해 구분될 수 있는 이름을 붙인다. 예를 들어 인터페이스(interface)의 첫글자를 대문자("I")로 추가하여 붙인다. 만약 인터페이스 명이 원래 첫글자가 "I"라면, 그래도 "I"를 추가할 수 있고, 깔끔하게 이런 경우는 "I"를 붙이지 않는다라고 할 수 있다.

ex) IPerson

약어 표시 방법은 약어를 모두 대문자 혹은 소문자로 사용하던가 다른 변수와 혼용하던가 하는 형식을 말한다.
값 유무 확인은 해당 값이 있는지를 변수명 앞에 is나 has를 붙인 메소드를 사용하는 것을 말한다.
값 획득과 변경도 비슷하다. get과 set를 붙이는가 다른 것을 사용하는가를 말한다.

Enum 형식인 경우 해당 명칭에 복수형으로 사용하라 혹은 특정한 약어를 사용할 수도 있다. 가급적이면 전자처럼 단어 의미로 알 수 있는게 가장 좋다.

이벤트 핸들러는 다른 함수와 틀리다. 그렇기에 다른 함수와 구분하기 위해 특정한 단어를 사용할 수있다.

전체적인 예제는 참조 [3], [5]를 보시면 된다.

참고

[1] Programming Style, http://en.wikipedia.org/wiki/Programming_style

[2] GNU Coding Standards, http://en.wikipedia.org/wiki/GNU_Coding_Standards

[3] GNU 코딩 표준 문서, http://www.gnu.org/prep/standards/standards.html

[4] Hungarian Notation: http://en.wikipedia.org/wiki/Hungarian_notation

[5] Naming Guidelines: http://msdn.microsoft.com/en-us/library/xzf533w0.aspx

반응형

'1.관리 및 아키텍처 > Architecture' 카테고리의 다른 글

윈도우 메모리 구조  (0) 2009.10.07
16F84A 메모리 구조  (0) 2009.09.25
통신 프로토콜 스팩  (0) 2009.03.04
동영상 화질 이야기  (0) 2007.05.10
MVC모델과 UML의 클래스 표현법  (0) 2007.04.16