본문 바로가기

My Study/Programming&Theory

프로그래밍 시 변수명 ( Hungarian notation )

 다들 프로그래밍 하시면서 변수명을 지을 때 어떻게 지으시나요??;;
사실 저도 프로그래밍 경험이 많이 없어서 변수명을 지을 때 제 맘대로 지어버립니다.
어쩔때보면 제가 제 코드를 다시봤을 때 이게 뭐하는 변수였지?? 라는 의문이 들 때가 있습니다.
그래서 꼭 주석도 달아놔야되죠.

인터넷 여기저기 돌아다니다가 변수명에 대한 글이 있길래 읽어보고 정리해봅니다.
====================================================================
헝가리안 표기법 ( Hungarian notation )
헝가리안 표기법은 컴퓨터 프로그래밍에서 변수명,함수명을 지을 때 일정 규칙을 가지고 만드는 것 입니다.
간단히 역사를 보면 원래의 헝기리안 표기법은 Charles Simonyi라는 사람이 발명한 것입니다.
Charles Simonyi는 Xerox PARC에서 대략 1972~1981년에 일했던 헝가리 인 프로그래머 입니다.
그 후 그 분은 Microsoft 최고의 아키텍쳐가 되었습니다.

간단하게 변수명을 지을 때 헝가리안 표기법을 알아보겠습니다.

0 : 변수의 위치를 지정한다. g(전역변수), m(멤버변수), 없음(지역변수) 
1 : 0 위치에 g 나 m 을 지정한 경우 _ 을 기술한다. 
2 : 자료형의 종류를 나타낸다. 

   n, i : 정수형(n 은 카운트 목적, i 는 인덱스 목적) 
   l : long 형 (과거 int 와 구분하기 위해서 사용했다.) 
   u : 부호없는 정수형 
   w : 부호없는 2 byte 정수형 
   dw : 부호없는 4 byte 정수형 
   p : 포인터 타입 
   f, d : 실수형(f 는 float, d 는 double) 
   sz : char 배열(문자열 표현) 
   클래스 이름에 대해서는 관습적으로 자음축약형을 사용한다. 

3 ~ : 변수의 의미 있는 이름을 기술하며, 3 위치는 대문자를 사용한다. 변수 이름이 너무 긴 경우 자음만을 기술한다. 
예) g_nCnt 
대충 이러한 규칙을 가지고 있습니다.

간단한 예제를 봐보겠습니다. ( http://en.wikipedia.org/wiki/Hungarian_notation )

Examples

  • bBusy : boolean
  • chInitial : char
  • cApples : count of items
  • dwLightYears : double word (systems)
  • fBusy : boolean (flag)
  • nSize : integer (systems) or count (application)
  • iSize : integer (systems) or index (application)
  • fpPricefloating-point
  • dbPi : double (systems)
  • pFoo : pointer
  • rgStudents : array, or range
  • szLastName : zero-terminated string
  • u32Identifier : unsigned 32-bit integer (systems)
  • stTime : clock time structure
  • fnFunction : function name

The mnemonics for pointers and arrays, which are not actual data types, are usually followed by the type of the data element itself:

  • pszOwner : pointer to zero-terminated string
  • rgfpBalances : array of floating-point values
  • aulColors : array of unsigned long (systems)

While Hungarian notation can be applied to any programming language and environment, it was widely adopted by Microsoft for use with the C language, in particular forMicrosoft Windows, and its use remains largely confined to that area. In particular, use of Hungarian notation was widely evangelized by Charles Petzold's "Programming Windows", the original (and for many readers, the definitive) book on Windows API programming. Thus, many commonly-seen constructs of Hungarian notation are specific to Windows:

  • For programmers who learned Windows programming in C, probably the most memorable examples are the wParam (word-size parameter) and lParam (long-integer parameter) for the WindowProc() function.
  • hwndFoo : handle to a window
  • lpszBar : long pointer to a zero-terminated string

The naming convention guidelines for .NET Framework, Microsoft's more recent software development platform, advise that Hungarian notation should not be used.[2]

The notation is sometimes extended in C++ to include the scope of a variable, separated by an underscore. This extension is often also used without the Hungarian type-specification:

  • g_nWheels : member of a global namespace, integer
  • m_nWheels : member of a structure/class, integer
  • m_wheels : member of a structure/class
  • s_wheels : static member of a class
  • _wheels : local variable
일단 위 예제에서도 알수 있듯이 헝가리안 표기법은 C에서만 사용할수 있는 것인 아닌 API, 닷넷 프로그래밍 등에서도 사용할 수 있습니다.

구글에서 찾아보니 Table 이미지가 있어서 붙여넣어봅니다. ( 여기 이미지에 위에서 설명했던 내용이 다 있군요. )


앞으로 저도 프로그래밍 할 때 변수명을 신경써서 지어야 겠습니다.