C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[18851] 헝가리안 표기법을 버려라...를 보고...
남병철.레조 [lezo] 4979 읽음    2010-12-05 17:04
[한글]
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
땅주인 [heaven2]   2010-12-06 09:15 X
Clean Code를 읽으며, 많은 내용이 있지만.. 기억에 남는 것이... "Source code is document..." 를 추구한다는...
헝가리안을 지키든 안지키든... 개발자가 잘 이해하고.. 몇 달 지나서도 봐도 잘 이해되고, 다른 사람 주었을 때 속으로 욕 안하겠구나 하는 정도가 되기를..... 겨울 잎새에 이는 바람에도 나는 괴로워 한네~~~~~.
손에 익어서 헝가리언 당장은 버리지 못할 것 같고.. 당분간의 과도기가 있을 것 같네요.
좋은 내용 감사합니다.
아제나 [azena]   2010-12-06 09:23 X
윈도우API에 쓰인 윈도우리안(?) 표기법들을 보면 좋은거 같기도 하고 아닌거 같기도 하고 하네요 ^^
LPCUWSTR 같은 것을 보면;;;
요즘은 코드 인사이트, 인텔리센스 같은 코딩 어시스트 프로그램들이 있어서, 헝가리안 표기법 자체가 예전만큼 크게 와닿지는 않는거 같아요.
그래도 개인적으로는 파라미터에 프리픽스로 in_, out_ 써주고 맴버에 m_, 가상에 v_, 글로벌에 g_ 붙이는 것은 예전부터 해오던 것이라서 이젠 거의 몸에 익었다고 해야할거 같네요 ㅎㅎ
곽효근 [hggwak]   2010-12-06 10:29 X
헝가리안 표기법이 명확하게 정해진것 이라기 보다는 소스의 유지보수 차원에서 쉽게 읽을 수 있는 코드나 함수들을 만들어 내기 위해 하다보니 프로그래머들이 공통적으로 사용하는 방법들이 비슷 해지고 그에대한 사례가 헝가리안 표기법이라 불리는 사례가 있어서 보편적으로 사용하는 코딩 기법? 이라고 개인적으로 생각해 왔는데.... BS 박사님은 코딩을 어떻게 하시는지 보구싶네요~

곽효근 [hggwak]   2010-12-06 10:50 X
BS 박사님의 선호하고 알리고자 하는 내용은...
1- 자신이 만들려는 프로그램의 핵심 개념을 이해하고 그 의미를 반영하도록 이름 짓는다.
2- 자신이 만들려는 프로그램의 핵심 개념을 지원하는 라이브러리를 만든다.
3- 유용한 라이브러리를 구별한다(?VCL? +_ +).
4- 아이디어를 조기 테스트하고 통합해 본다. 또한 조기에 자주 테스트 한다.
5- 작은 프로그램에서 크게 키워간다.
6- 메뉴얼과 튜토리얼을 프로그램밍 디자인 기반으로 사용한다.

============================================================

BS박사님이 선호하고 알리고자 하는내용중에
1번은 솔직이 어떤 말씀이신지 모르겠고... (ㅠㅠ)
2번은 핵심 개념을 구성하는 모듈이나 클래스 라이브러리를 만들어서 인터페이스와 구분 지으라고 하시는 말씀이 아닐까 추측해봅니다.
3번은 역시나 어떤 말씀인지 모르겠고...(ㅠ_ㅠ)
4번은 프로그래밍시 모듈이나 클래스 등을 만들때 새로운 프로젝트에서 이것저것 테스트 해보라는 말씀이신지.. 저는 이런 방식을 선호 해서..
5번은 작은 프로그램에서 크게 키운다는 의미가 인터페이스를 맞춰놓고 개발할때와 기능먼저 만들고 인터페이스를 맞추는 방식인지 모르겠네요
6번.. 메뉴얼이나 튜토리얼을 프로그래밍 디자인 기반으로 한다는게... 모든 개발사항들이 완벽하게 픽스 되어있을때나 가능하지 않을까 싶네요
수시로 변경되는 고객의 변덕을 고려한다면.. 국내에서는 힘들지 않을까 싶습니다... 픽스 지어놓구 고객이 바꿔달라고 할때마다 비용 청구 할 수도
없는 노릇이구요


어렵군요..(ㅠ_ㅠ)

+ -

관련 글 리스트
18851 헝가리안 표기법을 버려라...를 보고... 남병철.레조 4979 2010/12/05
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.