코딩시 이름규칙을 어떻게들 하시나요?

innu의 이미지

매번 이름규칙이 바뀌어 나만의 것을 가지고 있지않아 내가 짠 코드를 볼때도 이게 뭔가하고 헷갈릴때가 많습니다.

상수는 무조건 대문자로 하는건 같은데 클래스명,함수명,변수명 규칙은 매번 바뀌어 어떻게 줘야 할지 난감하네요..
헝가리안표기도 써 봤는데 너무 길고 나중엔 더 헷갈리더군요.
이것도 훈련이 되어야 겠더군요.

여러분들은 어떤방식으로 정의해 놓고 쓰시는지, 그리고 이런 문제들에 대한 내용의 서적이나 url 좀 부탁드립니다.

lifthrasiir의 이미지

저는 짜가 코더-_-라서 이름 규칙이 그렇게 고른 편은 아닙니다. 하지만 대충 정리하자면...

상수 어느 경우라도 underscore로 분리하고 모조리 대문자로 쓴다.
클래스 항상 낙타 케이스-_-_-_-로 쓴다.
함수/메소드 파이썬이나 루비의 경우 소문자로 모조리 붙여 쓰고 (ex: getvalue) C나 C++의 경우 underscore로 분리하고 모두 소문자로 쓴다. (ex: get_value)
변수명 함수/메소드 명과 비슷하지만 C나 C++의 경우 underscore를 안 쓰는 경우도 있다.
멤버 변수 변수명과 비슷하지만 C++의 경우 앞에 m_을 붙인다.

당연한 소리지만 underscore는 밑줄(_)입니다.

- 토끼군

khris의 이미지

상수 : 죄다 대문자로쓰고, 단어들은 _ 로 구분합니다
클래스 이름 : kh(개인적으로 쓰는 뭐 그런;)뒤에 클래스명을 붙입니다
함수 : Get, Set, Is 등의 접두어를 붙이거나, 앞의 세가지 경우에 해당하지 않을때는 붙이지 않습니다
단어의 첫글자마다 대문자로 해줍니다
변수명 : n이나 i, f등은 붙여주지 않습니다. 자연어쓰듯이 씁니다.
멤버변수 : _ 를 붙여줍니다.

───────────────────────
yaourt -S gothick elegant
khris'log

lifthrasiir의 이미지

생각해 보니 prefix를 까먹었네요.

클래스 prefix 같은 건 제끼고 namespace로 올인-_- 파이썬 등등에서는 아예 파일 단위로 구별하니까 역시 안 씁니다.
상수/함수/변수명 C의 경우 LIBRARY_ 혹은 library_ 형식의 prefix를 사용합니다. 물론 내부 변수는 그 앞에 _를 붙인다던지 하고요.
메소드 get(_), set(_), is(_) 정도 말고는 딱히 쓰는 prefix가 없습니다.

생각해 보니까 옛날에 VB 프로그래밍 할 때는 컨트롤들 이름 앞에 prefix를 별의별 이상한 걸로 줬던 기억이 나네요. Command면 cmdBlah, TextBox면 txtBlah... :S

- 토끼군

khris의 이미지

tokigun wrote:
생각해 보니까 옛날에 VB 프로그래밍 할 때는 컨트롤들 이름 앞에 prefix를 별의별 이상한 걸로 줬던 기억이 나네요. Command면 cmdBlah, TextBox면 txtBlah... :S

책에서 헝가리안 운운하면서 가르쳤죠.
대부분의 VB책이 잘못된길로 VB유저들을 이끌었기에 VB가 무시당하고 있는것이 아닌가 생각이 듭니다...
프로젝트 만들면 메인 모듈도 아닌 폼 딸랑 만들어주고...
폼에다 죄다 하드코딩. :shock:

───────────────────────
yaourt -S gothick elegant
khris'log

u2em의 이미지

:oops: 갓 C 문법을 뗀 초짜에게 MFC를 가르치는 괴상한 책에서 배운 헝가리안 표기법을 씁니다. 이제는 익숙해져서 쓰지 않는 게 더 불편하더군요.

khris의 이미지

생각해보니 VB망친게 우리나라 웹망친거랑 똑같은 루트군요.

책이 제대로된게... 에잇. :twisted:

───────────────────────
yaourt -S gothick elegant
khris'log

yielding의 이미지

boost convention을 따릅니다.

Life rushes on, we are distracted

소리의 이미지

예전에 제 코딩 스타일을 만들 때 참고한 문서들입니다.

SUN Java Code Conventions
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html

Linux kernel coding style
http://src.soohrt.org/CodingStyle

GNU coding standards
http://www.gnu.org/prep/standards/

기타
http://www.chris-lott.org/resources/cstyle/CppCodingStandard.html
http://www.jetcafe.org/~jim/c-style.html

아마 위 문서들 모두가 Naming Conventions이나 이에 해당하는 항목을 갖고 있을 겁니다.

그리고 코딩 스타일과 관련해 제가 범한 우를 다른 분이 범하지 않으시도록 말씀드리고 싶은 게 있습니다.
첫째로 완벽한 코딩 스타일은 존재하지 않는다는 것입니다. 프로그래밍 언어도 논리적 한계가 있기 때문에, 어떤 원칙을 가지고 모든 경우에 적용시키는 건 사실상 불가능합니다. 그리고 기존 관습을 완전히 무시하여 만들어진 것도, 프로그래밍은 혼자만 하는 것이 아니기에 지켜질 수 없습니다.
둘째로 한 코딩 스타일에 너무 집착하는 건 시간낭비일 뿐이며 바르지도 않다는 것입니다. 좋은 프로그래머라면 수행하고 있는 작업에 따라 필요할 때에 자신의 코딩 스타일을 포기할 줄 아는 유연성과 용기를 가지고 있어야 합니다. 그렇게 하지 않으면 목적이 수단에 의해 지배당하게 되는 것입니다.
(...네, 지금까지 제 자신에게 하는 조언이었습니다. OTL)

maja의 이미지

아무렇게나 지어요.
gcc어셈보면 레벨명도 1 2 3 등등으로 짓잖아요.
스트레스...-.-

doomsday의 이미지

글로벌한 변수가 아니면 그냥 변수가 의미하는 단어의 첫글자만 따서 쓰고 선언부에 주석답니다. 나중에 보기엔 이게 훨씬 편하더군요 -_-

헝가리안도 좀 쓰다가 이것도 귀찮아서 요즘은 특별한 이유가 있지 않으면 안씁니다. 함수명과 클래스명은 좀 신경써서 짓습니다.

죠커의 이미지

베이직은 언어 자체가 구리지 않은가요? :-)

오리지날 베이직을 빌 게이츠가 망쳤다는 루머도 있던데 오리지날 베이직은 어떤지 모르겠습니다. (구해보려 했더니 상용이더군요.)

youlsa의 이미지

최대한 이름을 길게 짓는거 말고는 별로 신경 안씁니다.

this_flag_should_be_watched_through_this_loop 뭐 이런 이름의 변수까지 있습니다. ^^

그리고, 헝가리안 노테이션은 VB에서는 그리 큰 쓸모가 없지 않나요? C로 윈도우 프로그래밍 하던 때에 쓰려고 만든거라. 그때 당시의 개발환경은 auto completion과 같은 기능들을 기대하기 힘들때라 헝가리안 노테이션 같은게 필요했었죠.

=-=-=-=-=-=-=-=-=
http://youlsa.com

khris의 이미지

CN wrote:
베이직은 언어 자체가 구리지 않은가요? :-)

오리지날 베이직을 빌 게이츠가 망쳤다는 루머도 있던데 오리지날 베이직은 어떤지 모르겠습니다. (구해보려 했더니 상용이더군요.)


언어 자체가 구리다는것과는 -사실 솔직히 구립니다, 적어도 VB6까지는- 별개의 문제로, 대부분의 VB서적이 WIN32API활용이나 간단한 메시지 후킹, OCX(ActiveX컨트롤)사용등의 트릭들에만 치중하고 있습니다. 클래스가 언어 자체에서 제대로 지원하지 않기도 하지만(상속은 되는데 인터페이스 상속만 됩니다...) 그 반쪽짜리 클래스마저도 제대로 설명하고 있는 서적이 잘 없습니다. 반쪽짜리 OOP라고는 하지만 실상은 제대로 이루어지지 않은 학습과 교육에 있다고 봅니다. 단순히 VB를 다른 언어로 건너가기 위한 중간단계라고만 보는것도 한몫합니다. 그러나 정말로 중간 단계라면 OOP라던지, 좀 더 깊은 프로그래밍에 대해 배워야 하는것 아닐까요? :)

───────────────────────
yaourt -S gothick elegant
khris'log

khris의 이미지

youlsa wrote:
최대한 이름을 길게 짓는거 말고는 별로 신경 안씁니다.

this_flag_should_be_watched_through_this_loop 뭐 이런 이름의 변수까지 있습니다. ^^

그리고, 헝가리안 노테이션은 VB에서는 그리 큰 쓸모가 없지 않나요? C로 윈도우 프로그래밍 하던 때에 쓰려고 만든거라. 그때 당시의 개발환경은 auto completion과 같은 기능들을 기대하기 힘들때라 헝가리안 노테이션 같은게 필요했었죠.


저는 VB로 그나마 제대로 프로그래밍 공부를 시작했고, 그래서 헝가리안 표기법은 컨트롤 이름을 세글자로 축약시키는건줄 알았습니다... 대부분의 책에서도 그리 설명하고요.

Ex) 커맨드버튼 -> cmd~
레이블 -> lbl~

───────────────────────
yaourt -S gothick elegant
khris'log

lifthrasiir의 이미지

khris wrote:
CN wrote:
베이직은 언어 자체가 구리지 않은가요? :-)

오리지날 베이직을 빌 게이츠가 망쳤다는 루머도 있던데 오리지날 베이직은 어떤지 모르겠습니다. (구해보려 했더니 상용이더군요.)


언어 자체가 구리다는것과는 -사실 솔직히 구립니다, 적어도 VB6까지는- 별개의 문제로, 대부분의 VB서적이 WIN32API활용이나 간단한 메시지 후킹, OCX(ActiveX컨트롤)사용등의 트릭들에만 치중하고 있습니다. 클래스가 언어 자체에서 제대로 지원하지 않기도 하지만(상속은 되는데 인터페이스 상속만 됩니다...) 그 반쪽짜리 클래스마저도 제대로 설명하고 있는 서적이 잘 없습니다. 반쪽짜리 OOP라고는 하지만 실상은 제대로 이루어지지 않은 학습과 교육에 있다고 봅니다. 단순히 VB를 다른 언어로 건너가기 위한 중간단계라고만 보는것도 한몫합니다. 그러나 정말로 중간 단계라면 OOP라던지, 좀 더 깊은 프로그래밍에 대해 배워야 하는것 아닐까요? :)

옛날에 VB6/.net을 쓰는 친구랑 얘기 하다가 VB.com 같은 걸 오픈 소스로 만들어 보면 어떨까라는 얘기가 나온 적이 있습니다. VB6에서 (VB.net은 너무 많이 바뀌어서...) 미흡한 OOP 지원을 좀 강화하고 쓸데 없는 문법들 정리하고 해서 만들면 좋겠다고 생각했는데 내공 부족으로 저는 좀 무리입니다 -_-;;

- 토끼군

khris의 이미지

tokigun wrote:
khris wrote:
CN wrote:
베이직은 언어 자체가 구리지 않은가요? :-)

오리지날 베이직을 빌 게이츠가 망쳤다는 루머도 있던데 오리지날 베이직은 어떤지 모르겠습니다. (구해보려 했더니 상용이더군요.)


언어 자체가 구리다는것과는 -사실 솔직히 구립니다, 적어도 VB6까지는- 별개의 문제로, 대부분의 VB서적이 WIN32API활용이나 간단한 메시지 후킹, OCX(ActiveX컨트롤)사용등의 트릭들에만 치중하고 있습니다. 클래스가 언어 자체에서 제대로 지원하지 않기도 하지만(상속은 되는데 인터페이스 상속만 됩니다...) 그 반쪽짜리 클래스마저도 제대로 설명하고 있는 서적이 잘 없습니다. 반쪽짜리 OOP라고는 하지만 실상은 제대로 이루어지지 않은 학습과 교육에 있다고 봅니다. 단순히 VB를 다른 언어로 건너가기 위한 중간단계라고만 보는것도 한몫합니다. 그러나 정말로 중간 단계라면 OOP라던지, 좀 더 깊은 프로그래밍에 대해 배워야 하는것 아닐까요? :)

옛날에 VB6/.net을 쓰는 친구랑 얘기 하다가 VB.com 같은 걸 오픈 소스로 만들어 보면 어떨까라는 얘기가 나온 적이 있습니다. VB6에서 (VB.net은 너무 많이 바뀌어서...) 미흡한 OOP 지원을 좀 강화하고 쓸데 없는 문법들 정리하고 해서 만들면 좋겠다고 생각했는데 내공 부족으로 저는 좀 무리입니다 -_-;;

- 토끼군

Gambas나 RealBasic쪽은 어떨까요?
VB.net은 이름대로 .net 프레임워크에 종속적이기때문에 떼어내거나 하는게 어렵습니다.
(.net Framework가 없으면 제대로된 프로그램 짜기도 힘듭니다. VisualBasic 네임스페이스에 남아있는 VB6 함수들도 .net Framework 함수들을 단순히 포장하는것으로 추정되는데다 빈약합니다)

───────────────────────
yaourt -S gothick elegant
khris'log

lifthrasiir의 이미지

khris wrote:
tokigun wrote:
khris wrote:
CN wrote:
베이직은 언어 자체가 구리지 않은가요? :-)

오리지날 베이직을 빌 게이츠가 망쳤다는 루머도 있던데 오리지날 베이직은 어떤지 모르겠습니다. (구해보려 했더니 상용이더군요.)


언어 자체가 구리다는것과는 -사실 솔직히 구립니다, 적어도 VB6까지는- 별개의 문제로, 대부분의 VB서적이 WIN32API활용이나 간단한 메시지 후킹, OCX(ActiveX컨트롤)사용등의 트릭들에만 치중하고 있습니다. 클래스가 언어 자체에서 제대로 지원하지 않기도 하지만(상속은 되는데 인터페이스 상속만 됩니다...) 그 반쪽짜리 클래스마저도 제대로 설명하고 있는 서적이 잘 없습니다. 반쪽짜리 OOP라고는 하지만 실상은 제대로 이루어지지 않은 학습과 교육에 있다고 봅니다. 단순히 VB를 다른 언어로 건너가기 위한 중간단계라고만 보는것도 한몫합니다. 그러나 정말로 중간 단계라면 OOP라던지, 좀 더 깊은 프로그래밍에 대해 배워야 하는것 아닐까요? :)

옛날에 VB6/.net을 쓰는 친구랑 얘기 하다가 VB.com 같은 걸 오픈 소스로 만들어 보면 어떨까라는 얘기가 나온 적이 있습니다. VB6에서 (VB.net은 너무 많이 바뀌어서...) 미흡한 OOP 지원을 좀 강화하고 쓸데 없는 문법들 정리하고 해서 만들면 좋겠다고 생각했는데 내공 부족으로 저는 좀 무리입니다 -_-;;

- 토끼군

Gambas나 RealBasic쪽은 어떨까요?
VB.net은 이름대로 .net 프레임워크에 종속적이기때문에 떼어내거나 하는게 어렵습니다.
(.net Framework가 없으면 제대로된 프로그램 짜기도 힘듭니다. VisualBasic 네임스페이스에 남아있는 VB6 함수들도 .net Framework 함수들을 단순히 포장하는것으로 추정되는데다 빈약합니다)

Realbasic은 이미 알고 있습니다. (이것 때문에 따로 만들 이유가 크지 않다고 생각했기도 하고요) Gambas는 처음 봤군요.

- 토끼군

khris의 이미지

여담이지만 KBasic 이나 HBasic도 있습니다.

의외로 베이직에 애착을 가진사람들이 많더군요...

───────────────────────
yaourt -S gothick elegant
khris'log

xster의 이미지

전 대부분 이전에 프로젝트에서 사용하던 형태를 사용합니다.
약간 맘에 들지 않는 것들도 있지만 다른 모든 사람들이 사용하는 것이 좋다는 생각에..
사실 코딩 스타일은 어느 정도 다른 사람과 맞추는 의미에서 일정해야한다 는 의미를 가지는 것이 아닌가 싶습니다.

새로 시작하는 프로젝트를 사용한다면 어떻게 만들지는 좀 고민해봐야겠군요.
아마 클래스 이름은 단어별 첫자 대문자에 나머지 것들은 밑줄 난무가 되지 않을까 생각됩니다.