코딩 규칙은 여러 가지 이유에서 프로그래머에게 중요하다
하나의 식이 한 줄에 들어가지 않을 때에는, 다음과 같은 일반적인 원칙들을 따라서 두 줄로 나눈다.
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
다음은 메서드 선언을 들여쓰는 예제들이다. 첫번째는 일반적인 경우이다. 두번째 예제의 경우 일반적인 들여쓰기를 사용한다면 두번째 줄과 세번째 줄을 들여써야 하므로, 대신에 8개의 빈 칸을 이용하여 들여쓴다.
// 일반적인 들여쓰기
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
// 너무 멀리 들여쓰는 것을 피하기 위해 8개의 빈 칸으로 들여쓰기
private static synchronized horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
일반적으로 메서드 본문이 시작할 때 4개의 빈 칸을 사용하므로, 메서드 본문과 구분하기 위해서 줄을 나누는 경우의 들여쓰기는 일반적으로 8개의 빈 칸 원칙을 사용하자 예를 들면 다음과 같다.
// 아래와 같은 들여쓰기는 사용하지 말자.
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { // 좋지 않은 들여쓰기
doSomethingAboutIt(); // 메서드 본문 시작이 명확하지가 않다.
}
// 대신에 아래와 같은 들여쓰기를 사용한다.
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
// 또는 아래와 같은 들여쓰기를 사용한다.
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
다음은 삼항식(ternary expression)에서 사용 가능한 세 가지 방법이다.
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;
각각의 줄에는 최대한 하나의 문(statement)만 사용하도록 한다.
argv++; // 올바른 사용법
argc--; // 올바른 사용법
argv++; argc--; // 이렇게 작성하는 것은 피해라
복합문은 중괄호 “{ statements }” 로 둘러싸여진 문들의 리스트를 포함하는 문이다. 다음 원칙을 따르자.
값을 반환하는 return 문은 특별한 방법으로 더 확실한 return 값을 표현하는 경우를 제외하고는 괄호를 사용하지 않는 것이 좋다.
return;
return myDisk.size();
return (size ? size : defaultSize);
if-else 문을 사용할 때는 다음과 같이 작성한다.
if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}
if (condition) // 이렇게 중괄호 {}를 생략해서 사용하지 말자
statement;
공백은 다음과 같은 경우에 사용한다.
while (true) {
...
}
a += c + d;
a = (a + b) / (c * d);
while (d++ = s++) {
n++;
}
printSize("size is " + foo + "\n");
for (expr1; expr2; expr3)
myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3)) + 1);
명명 규칙, 즉 이름을 정하는 규칙은 프로그램을 더 읽기 쉽게 만들어 줌으로써 더 이해하기 쉽게 만들어 준다. 또한 식별자(identifier)를 통해서 기능에 대한 정보도 얻을 수 있다. 예를 들자면, 그것이 상수인지 패키지인지 클래스인지를 알 수 있도록 도와준다. 이러한 정보는 코드를 이해하는데 큰 도움이 된다.
**Packages
명명 규칙은 다음과 같다.** com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
2. Classes
명명 규칙은 다음과 같다.
class Raster;
class ImageSprite;
3. Interfaces
명명 규칙은 다음과 같다.
interface RasterDelegate;
interface Storing;
4. Methods
명명 규칙은 다음과 같다.
run();
runFast();
getBackground();
5. Variables
명명 규칙은 다음과 같다.
intcharfloat
6. Constants
명명 규칙은 다음과 같다.
int i;
char c;
float myWidth;
2. 클래스 변수와 클래스 메서드는 클래스 이름을 사용하여 호출
classMethod(); // 좋은 사용법
AClass.classMethod(); // 좋은 사용법
anObject.classMethod(); // 나쁜 사용법
3. 숫자는 바로 사용하지 않고 선언해서 변수 이름으로 접근
4. 변수에 값을 할당할 때 주의할 것들
fooBar.fChar = barFoo.lchar = 'c'; // 이렇게 사용하지 말자
// 이렇게 사용하지 말자 (자바가 허용하지 않음)
if (c++ = d++) {
...
}
// 다음과 같이 써야 한다
if ((c++ = d++) != 0) {
...
}
// 이렇게 사용하지 말자
d = (a = b + c) + r;
// 다음과 같이 써야 한다
a = b + c;
d = a + r;
5. 그 외 신경써야 할 것들
연산자 우선순위 문제를 피하기 위해서 복합 연산자를 포함하는 경우에는 자유롭게 괄호를 사용하는 것이 좋은 생각이다(작성자는 연산자 우선 순위를 확실하게 알고 있다고 할지라도, 다른 프로그래머에게는 생소할 수 있다는 것을 기억하자).
if (a == b && c == d) // 이렇게 사용하지 말자
if ((a == b) && (c == d)) // 이렇게 사용하자
프로그램의 구조와 목적이 일치해야 한다.
// 이렇게 사용하지 말자
if (booleanExpression) {
return true;
} else {
return false;
}
// 다음과 같이 써야 한다
return booleanExpression;
// 이렇게 사용하지 말자
if (condition) {
return x;
}
return y;
// 다음과 같이 써야 한다
return (condition ? x : y);
삼항 연산자(ternary operator - ? : ) 에서 ? 이전에 이항 연산자(binary operator)를 포함하는 식(expression)이 있는 경우에는, 꼭 괄호를 사용해야 한다.
(x >= 0) ? x : -x;
감사합니다