코딩할때 항상 고민입니다.
문제는 변수명명법이 문제가 없고 안헷갈리면 장땡이긴한데 (-_- 1인 개발자이니)
저는 제가 만드는데도 많이 헷갈립니다.
자바 컨버젼스를 찾아봐도 몇가지 주의사항만 있고
특별한 네밍법은 존재하지 않습니다.
저같은경우는 절대 _ (언더 바) 는 사용하지 않습니다.
지역변수에서 String, char, Integer, int, float, double 같은경우는
앞에 접두어를 붙입니다. n, nf, s 등과 같이요..
다른 클래스 변수는 무조건 앞에 m 을 붙입니다.
mEditTextEmail, mContext 등등과 같이요.
그런데 인터넷으로 찾아보니 m은 멤버변수의 약자더군요 -_- 멤버변수로 선언도 안해놓고...
여러분들은 어떻게 사용하고 계십니까?
헝가리안 표기법을 제 멋대로 단순화 시켜서 [스코프_][자료형](변수명) 으로 씁니다.
1스코프: 없음 / g(완벽한 전역이 아니더라도 의미상 이곳 저곳 쓰일때) / m(임의자료형 멤버)
2자료형: 없음 / p / n / str (총 네가지. numeric은 구분이 많을 수록 나중에 볼 때 좋긴한데, 아래 변수작명 잘하면 피볼일 없다고 생각)
3변수명: 대문자로 시작하는 접두사(Prefix). 숫자가 올 수 있는 접미사(Suffix). (3변수명만 있을 땐 소문자로 시작)
일단 제일 편한 방법
1. my씨리즈 (ex : myNumber , myView, myActivity)
- 코드 난독화의 거장, 제가 즐겨 쓴다는 그 유명한 변수명입니다.
2. A,B,C 씨리즈
- 제가 기분이 좋을때 가끔 쓰는데 이거 개 강추에요..
"내가 지금 코드를 갈아 엎는것은 어쩔수 없는 운명이다"임을 느끼게 해주죠
전 위 두가지를 적절하게 섞어 씁니다. 그리고 짯던 코드를 다시는 안 쳐다보죠.. 헤헤헤헤
안드로이드로 웬만하면 http://source.android.com/source/code-style.html#follow-field-naming-conventions
따르려고 노력은 합니다.
하지만 언급하신 헝가리안 표기법 관점에 국한한다면, 위 문서에 나온 m, s 를 제외하고 헝가리안 표기법 관련한건
사용하지 않습니다. 배제하는 이유는 인터넷에 잘 알려진 것과 동일하니, 생략합니다.
private 는 _ 로 시작, global 는 G+대문자, 클래스타입은 a+클래스명+1, 순환문에 사용될 integer 는.. i,j,k,l... 씨리즈(응?),
헝가리 표기법은 모르겠고 그냥 학교다닐때 배운대로 하다보니 습관이.. 습관이 무섭습니다.
아.. 추가로, PL 이 있는 프로젝트에서는 그 규칙에 맞게,, 대부분 코딩전에 글로벌이나 클래스명 펑션들은 미리 정의하죠,, 실시설계 단계에서, 빌어먹을 단어사전 보고..
임인수씨가(저자 이름까지 기억하네요) 쓴 C언어 완전정복이라는 배개 수준의 책으로
공부했던 세대라 대부분의 변수는 i, j, k로 시작을 하고 나머지 변수들은 기능에 따라
영어 단어를 그대로 쓰는 편입니다.
요즘같이 개발도구가 좋아진 시점에서는 헝가리안 표기법은 가급적 쓰지 않는것이 좋을듯 싶습니다.
(mEditTextEmail의 경우를 예로 들자면 클래스내 멤버로 EditText 인스턴스가 한 50개 된다고 치면 이클립스내에서 자동완성 검색을 위해서 mEditText까지 친 후에야 Email을 찾을 키워드를 칠 수 있기 때문에 Email을 입력하는 EditText를 자동완성 하기 위해서는 무려 9글자 이상을 입력한 후에야 자동완성 시킬 수 있게 되는거죠)
다만 멤버를 뜻하는 m 은 메소드 파라미터의 이름이 겹칠 때 this를 붙여야 하는 부분들 때문에 m을 붙일때의 가독성이나 일관성이 더 좋은거 같고 static의 s는 멤버와의 구분해야 할 필요성에 의해 쓰는게 더 나을거 같습니다.
안녕하세요.
저도 사실 궁금했는데.^^
머리통이 휘발성이다 보니 100줄이상 넘어가면 당췌 변수명을 기억하기도 힘들고 이클립스 활용법도 몰라서 저는 그냥
다 씁니다.ㅎㅎ...표기법을 잘 못따라가서요..
strFinalStageOpen....이렇게 해놔야. 수정못하는 문자형 변수라는것을 알수 있어서요..ㅎㅎ
저도 java(안드로이드) 코딩 컨벤션 가이드 중에 불필요한 빼고 꼭 필요한 것들만 추려서 사용하는데요.
몇년전에 MMORPG 게임 같은거 개발할 때는 헝가리안 표기법도 쓰고 꼭 지키고 그랬는데..
모바일은 프로젝트 규모도 상대적으로 작고, 요즘은 툴도 잘 되어 있으니 그렇게까진 필요 없을 것 같더라구요.
저는 플랫폼 가리지 않고 일관적으로 카멜 + 헝가리 혼용하는 방식을 사용합니다.
좋은 표기법을 떠나서 일관된 코드는 자신의 업무집중력을 높여주고 개발기간을 지연시키지 않게하는 효과가 있습니다.
예상치못한 구간의 버그를 잡는데도 코드를 논리적으로 읽어서 따라가기 수월하구요...
멤버변수의 경우는 다음과 같이..
Building[] mBuildingObjects;
static Application sThisApplication;
String mString;
지역변수는 다음과 같이..
float viewWidth;
float viewHeight;
static Application sThisApplication;
String string;
메서드는 다음과 같이
int getFieldCountFromObserverUnit();
콜백함수는 다음과 같이
onEnterFrame
onKeyPress
onKeyRelease
그밖에 알아보기 쉽도록 모든 {}는 반드시 세로로..
void onKeyPress()
{
};
포문은 앵간하면 ++만.
swtich case는 반드시 0부터 순차적으로,
enum이나 define의 경우는 해당 enum의 이름을 우선쓰고 이후에 전부 대문자를 씁니다.
enum Align
{
AlignCENTER,
};
코드 가독성을 해치는 단순 외부반환함수의 경우 1줄로 표기합니다.
int getWidth(){ return mWidth; }
클래스 정의는 항상 다음과 같이 위에서 아래로 이루어집니다.
변수
생성자
인자를 가진 생성자
파괴자(혹은 파괴하기위한 메서드)
오퍼레이터
이벤트 핸들러(onKeyPress)
일반적인 함수(applicationClose() 따위의 목적을 위한 알고리즘)
셋함수(setWidth)
애드함수(addWidth)
서브함수(subWidth)
멀티플라이함수(mulWidth)
디바이드함수(divWidth)
겟함수(getWidth)
그리고 가급적이면 저 해당 카테고리안에 속한 오버라이드는 위에 이 클래스에서 새로만든 함수는 아래 둡니다.