[한글]
http://msdn.microsoft.com/ko-kr/magazine/cc500572.aspx
[영문]
http://msdn.microsoft.com/en-us/magazine/cc500572.aspx
-> 소스코드는 형식 시스템을 시뮬레이션하는 것이 아니라 프로그램의 의미를 반영해야 합니다.
-> 정말로 헝가리식 표기법이 필요하다고 느낀다면 응용 프로그램에 맞지 않는 언어를 사용하고 있는 것일 수 있습니다.
이 부분에 대한 언급은 C++ 창시자 Bjarne Stroustrup의 프로그래밍 성향을 보여주는 대목인것 같습니다. ^^
흠.. 헝가리식 표기법은 구조적 프로그래밍에도 의미 있겠지만 객체지향 프로그래밍을 하면서 멤버 변수와 일반 변수 그리고 변수의 타입을 명확히 하는것이 프로그래밍 생산성에 도움 되었기 때문에 주목 받았습니다.
그럼... BS 박사님 그의 성향은 무엇일까요?
--------------------------------------------------------------------------------
HD : What process methodology do you tend to use and teach?
BS : Identify key application concepts, identify useful libraries, build new libraries in support of the application concept, try out ideas early, integrate early, test early and often, use documentation and tutorial material as design tools, and grow larger programs from smaller ones (iterating along the way). It should be obvious that I'm focusing on relatively small projects just now.
"HD : 박사님이 선호하고 사용하도록 가르치는 방법론은 무엇입니까?"
"BS : 응용 프로그램 핵심 개념 식별, 유용한 라이브러리 식별, 응용 프로그램 개념의 지원에서 새로운 라이브러리 작성, 아이디어 조기 테스트, 조기 통합, 조기에 자주테스트, 설명서와 자습서 자료를 디자인 도구로 사용, 작은 프로그램에서 큰 프로그램으로 키우기(과정에서 반복)
--------------------------------------------------------------------------------
HD : What are some of your personal rules of thumb when creating software?
BS : Focus on key concepts; focus on their interfaces; focus on the management of resources (memory, files, locks, and so on); focus on error handling. The design of good invariants for classes and Resource Acquisition Is Initialization (RAII) are key techniques.
"HD : 소프트웨어를 개발할 때 개인적으로 중요하게 여기는 사항이 있다면 무엇입니까?"
"BS : 핵심 개념에 집중, 해당 인터페이스에 집중, 리소스(메모리, 파일, 잠금 등) 관리에 집중, 오류 처리에 집중
--------------------------------------------------------------------------------
흠.. 한글 번역이라 다소 어색하지만 대략적인 방향이 보일 것입니다.
이처럼 핵심 개념에 집중하는 성향이기 때문에 헝가리식 표기법 즉, 형식 중심의 이름짓기를 권장하지 않는것 같습니다.
객체지향 프로그래밍을 하다보면 클래스 이름은 비교적 핵심 개념에 집중하는 스타일로 짓게 됩니다.
클래스 자체가 이미 하나의 형식을 대변하기 때문에 그렇습니다. 그런데 그 내부 동작방식도 핵심 컨셉을 가지도록 지으라는 의미인데...
헝가리식 표기법은 접두어이니 컨셉을 적은 이름에 붙었을때 코드의 미려함이 떨어져 보일 수 있지만 핵심 컨셉을 전달하는데 방해 요소로 작용하지는 않다고 생각합니다.
BS 박사님의 헝가리식 표기 버려라는 미려한 혹은 느슨한 프로그래밍에 어울릴지 모르겠지만 다른 사람의 코드를 읽거나 자신의 예전 코드를 읽을때 프로그래머 특성상 머리속에 그 구조를 형상화? 시켜가면서 읽기때문에 형식 표현이 확실한 쪽이 더 유용합니다. 만일 헝가리식 표기법이 iKor 과 korScore 같은 수준의 이유 때문에 권장하지 못하는 것이라면 iKorScore로 표기할 수 있습니다.
[다른 관점]
iKor이 korScore 처럼 사용되는 타당성을 두고 본다면 korScore가 꼭! int 형이아닐 수도 있는 가변적 코드 상황이면 의미 있습니다.
즉, 상황에 따라 타입이 가변 될 수 있는 느슨한? 프로그래밍을 염두에 두고 언급한 것이라 생각됩니다.
더 나아가자면 변수명에게 잃어버렸던? 인터페이스로서의 지위를 돌려 주자는 것입니다.
(그렇다면 VCL에서 사용하는 property 개념이 앞으로 적용되는 것인가요? +_ +)
그럼 BS 박사님이 가르치려 하는것에 맞는 프로그래밍을 하게 되려면 헝가리식 표기보다는 프로그래밍의 의미를 반영하는 명칭을 사용하는게 좋을 것입니다.
BS 박사님의 선호하고 알리고자 하는 내용은...
- 자신이 만들려는 프로그램의 핵심 개념을 이해하고 그 의미를 반영하도록 이름 짓는다.
- 자신이 만들려는 프로그램의 핵심 개념을 지원하는 라이브러리를 만든다.
- 유용한 라이브러리를 구별한다(?VCL? +_ +).
- 아이디어를 조기 테스트하고 통합해 본다. 또한 조기에 자주 테스트 한다.
- 작은 프로그램에서 크게 키워간다.
- 메뉴얼과 튜토리얼을 프로그램밍 디자인 기반으로 사용한다.
BS 박사님의 개발 컨셉은...
- 만들려는 프로그램의 핵심 개념과 그 인터페이스에 집중!
- 리소스 관리(메모리, 파일, 잠금 등)
- 에러 핸들링
- 변화없는 좋은 클래스 및 RAII(Resource Acquisition Is Initialization:리소스 획득과 동시에 초기화) 설계
흠.. 조기 테스트와 통합을 언급한 점은 좋아 보입니다. 그리고 프로그램을 키워 간다는 점도 재미있습니다.
일단 작은 구현부터 테스트 하면서 키우는 방식입니다.
뒷짐지고 큰 판에서 세부까지 탑다운 디자인을 선호하지 않는다고 볼 수 있습니다. (실속파? 느낌이 납니다. ㅎㅎ)
이미 경험있는 것이라면 큰 그림에서 시작 할 수 있겠지만 개발이란 상황에 따라 다양하기 때문에 좋은 성향 같아 보입니다.
그리고 메뉴얼과 튜토리얼을 기반으로 디자인 한다는 것은 구현 컨셉의 모호성을 최소화 시키려는 의도 같아 보입니다.
모두가 최초 판본?을 기준으로 생각을 확장 시킨다면 소스코드의 모호성이 최소화 되지 않을까요? ^^;
그나저나... 헝가리식 표기법을 무조건 사용 않하자니 뭔가 허전한것 같네요. --;
자신의 변수명이 인터페이스로 사용되는...
다시 말하자면 라이브러리나 개발자가 접근해서 사용하는 것이라면 느슨한 표기가 더 인터페이스 다운 형상일것 같습니다.
하지만 형식이 중요한 내부 동작 변수로서의 특징이 강하다면 여전히 헝가리식 표기법이 유용할 것 같습니다.
특히 C/C++은 포인터 연산이 자주 사용되기 때문에 형식이 명료하고 중요한 순간이 있습니다.
결국...
앞으로 핵심 컨셉을 표현하는 인터페이스이냐, 기계적 동작의 내부 변수이냐에 따라서 변수 작명을 구분 할 필요는 있어보입니다.
[동기부여]
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=63135
헝가리안을 지키든 안지키든... 개발자가 잘 이해하고.. 몇 달 지나서도 봐도 잘 이해되고, 다른 사람 주었을 때 속으로 욕 안하겠구나 하는 정도가 되기를..... 겨울 잎새에 이는 바람에도 나는 괴로워 한네~~~~~.
손에 익어서 헝가리언 당장은 버리지 못할 것 같고.. 당분간의 과도기가 있을 것 같네요.
좋은 내용 감사합니다.