헝가리안 노테이션에 대한 개인적인 생각

Maintenance/Code | 2018.01.18 00:52 | P.노우렛지

헝가리안 노테이션(Hungarian Notation)은 소스코드 작성 기법중 하나로 변수명에 타입을 명시하여 코드를 작성하는 것을 말한다. 당시 마이크로소프트의 직원 중 하나가 이러한 방식의 코딩을 즐겨 썼는데, 그가 헝가리인이었기에 이러한 이름이 붙은 것으로 알려져 있다.


변수명에 타입을 명시한다는 그 특성상 소스코드를 이해하기에 편리하다는 장점이 있어 아직 텍스트 편집기 + 컴파일러 수준이었던 IDE가 굴러다니던 당시에는 굉장히 획기적인 방식이었으나, 이후 IDE의 발전과 더불어 여러 단점들이 드러나 권장되지 않는 방식이 되었고, 지금은 사장된 방식이라고 봐야겠다.


장점이라곤 타입을 쉽고 빠르게 알수 있다 외에는 없는 이런 표기법을 아직도 애용하는 사람들이 가뭄에 콩나듯 있는게 현 상황이고, 그렇기에 이에 관련된 키배도 알게 모르게 일어나고 있다. 나 자신으로서는 헝가리안 노테이션에 대해 그리 좋게 생각하지 않는다. 그 이유를 몇가지로 나눠보면...


1. 이름이 난잡하다.

변수의 이름은 명확해야한다. 어디에 쓰는지, 무엇을 담고 있는지 명확하면서도 자질구레한 것이 붙어서는 안 된다는 것이다. 타입명 같은건 이미 변수를 선언할 때 명시 했는데 이름에 꼭 명시해야 하는가? 마치 파츄리 노우렛지라는 풀 네임을 갖다가 파츄리 라는 이름을 알아보기 쉽게 한다고 파츄리노우렛지 노우렛지 같은 짓을 하는 것과 마찬가지라는 것이다.


2. 리팩토링 할 때 굉장히 귀찮다.

만일 코드의 리팩토링이 일어나게 되면 변수의 타입을 변경하는 경우도 있을 것이다. 만약에 int 형 변수 iScore 의 타입이 char로 바뀌었는데 이름이 그대로 iScore라면? 전역변수 g_Mode가 특정 클래스의 멤버변수로 바뀌었는데 이름이 그대로라면? 타입 미스매칭 등의 이유로 컴파일이 안 되는것은 다행이고, 단순한 버그를 넘어 치명적인 보안 문제로 이어질 수 있는 것이다.


3. 프로그래머를 멍청하게 만든다.

타입은 프로그램을 작성할때 굉장히 많이 고려해야 하는 것으로, 특히나 저수준 프로그래밍을 할 수록 더욱 섬세한 타입 결정이 필요하다. 그 정도로 중요한 타입에 대해 경계를 늦추도록 하면 할수록 추후 헝가리안 노테이션을 사용하지 않는 프로젝트에서 가독성이 떨어지고 버그가 넘쳐나는 좋지 못한 코드를 작성하게 된다.


만약 이 글을 읽는 당신이 헝가리안 노테이션을 사용하고 있다면, 제발 집어치우기 바란다. 현재 개발되어 사용되고 있는 IDE들은 생각보다 굉장히 똑똑하며, 굳이 변수 이름에 타입을 명시할 필요도 없다. 그냥 변수 이름 위에 마우스 올리면 타입이 뜬다. 얼마나 간편한가.


자 이제 무엇을 해야하는가? 가서 똑똑한 IDE와 함께 코드를 리팩토링하자. 생각보다 일찍 끝난다.



P.S. 요근래 Windows API를 만질 일이 있어서 조금 만져보았는데, 마소는 제에에에에발 헝가리안 노테이션좀 갖다 버렸으면 좋겠다. lpsz가 뭐야 도대체. lpsz가.[각주:1]

  1. Long Pointer to a String that ends with Zero, 즉 0으로 끝나는 String을 가리키는 Long Pointer라는 뜻이다. 지금 관점에서 보면 정말 쓸데없다! [본문으로]