15년 정도 됬나요? 헝가리안 표기법이 인기를 끌기 시작한 것이. 헝가리안 표기법은 헝가리 출신의 프로그래머 찰스 시모니(Charles Simony)가 발명해서 헝가리안이라는 이름이 붙었습니다. 찰스 시모니는 MS에서 Chief Architect로 근무하며 억만장자가 되어 우주 여행도 갔다 왔지요.

윈도 프로그래밍으로 경력을 시작한 프로그래머들은 거의 대부분 헝가리안 표기법을 사용하는 것 같습니다. Win32 API를 비롯해서 MFC 까지도 모두 헝가리안을 사용하고 있으니까요. .NET Framework에서는 별로 쓰이지 않는 것 같네요.
다이나믹 타이핑을 지원하는 언어들에서는 도움이 될 수도 있다고 생각하지만, C/C++에서 헝가리안이 무슨 도움이 되는지 모르겠습니다. 가독성만 떨어질 뿐입니다.
변수 이름만 봐도 타입을 알 수 있다고 합니다만, 안보면 모르냐고 말하고 싶습니다. 변수명 pszName을 보면 zero-terminated string을 담고 있는 포인터라는 뜻이겠지요. 명확하기는 합니다. 그런데 그냥 name이라면 타입이 무엇일까요? 설마 float 또는 integer일 리는 없고 스트링일 것이라는 것이 명약관화합니다. char *, char [512], string, CString, QString 여러가지 타입이 가능하다고 항변할 수 있겠지만, 최소한 C++라면 컴파일러가 체크해 주기도 하고, 타입의 종류도 모르고 변수를 사용하는 경우는 거의 없습니다. 특히 최근의 IDE들은 포인터를 가져다 대기만 해도 타입을 알려주기도 하고요. dwCount, iLength 같은 변수명들은 정말 너무 한다는 생각도 듭니다. ㅎㅎ
또 만약에 타입을 바꿀 필요가 생겼을 경우에는 변수 이름을 모조리 바꿔야 하는 문제도 생깁니다.
리누스 토발즈가 한 말로 마무리 짓겠습니다.
"Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer."
ps. btnCancel 같은 의미적인 접두사들은 괜찮다고 생각됩니다. 또 g_ 와 같은 접두사도 글로벌 변수를 눈에 띄게 만들어 준다는 점에서 의미가 있어 보이고요.

댓글을 달아 주세요
C++이 후져서.. 진심입니다.
name이라고 하면 char*인지, char[100]인지, wchar*인지, std::string인지, std::wstring인지, CString인지, boost::string인지 알 수 없잖아요?
pszString 아니면 szString이라고 하면 뭐 LPSTR이나 LPTSTR, LPWSTR이겠구나 싶은거죠 뭐..
저도 윈도우로 프로그래밍을 시작한 서버 프로그래머지만, 요즘 남아있는 습관은 std::string 은 strXXXX, char[] 는 szXXXX 정도만 남아있는것 같네요. 이 2개는 혼용해서 쓰면 치명적인 경우(cin, cout, printf 등이 었던걸로 기억합니다)가 생겨서 좀 구분을 해서 썼었습니다. 나머지는 좀 번거롭기도 하고, 실효성이 생각보다는 많지 않더라구요.