본 code convention 은 Oracle Code Convention을 참고로 하되 약간 변형된 부분이 있음을 알려드립니다.
예) 한 줄 주석과 꼬리주석의 사용법
WHY Code Conventions(코딩 규약)?
- 1인 개발보다는 여러 명이서 협력하는 경우가 더 많다.
- 소프트웨어를 직접 개발한 개발자가 해당 소프트웨어의 서비스가 종료될때까지 유지보수를 담당하는 경우는 드물다.
- 코딩 규약을 지키면 다른 개발자가 소스 코드를 보았을 때 더 빠른 시간안에 이해할 수 있도록 도와준다.
1. 들여쓰기
한 줄의 길이
줄 나누기
2. 주석
블록 주석
한 줄 주석
꼬리 주석
줄 끝 주석
3. Statements
복합문
if, if-else, if else-if else
4. White Space
한 줄 띄우기
공백
5. 기타
괄호
1. 들여쓰기
들여쓰기는 4개의 빈 칸을 들여쓰기 단위로 사용한다.
한 줄의 길이
한 줄에 80자 이상 쓰는 것은 대부분의 터미널과 툴에서 다룰 수 없으므로 피한다.
줄 나누기
하나의 식이 한 줄에 들어가지 않을 때에는 아래 원칙에 따라 두 줄로 나눈다.
- 앞줄과 같은 레벨의 식(expression)이 시작되는 새로운 줄은 앞 줄과 들여쓰기를 일치시킨다.
// 추천
int longAnswer = longNumber1 * (longNumber2 + longNumber2 - longNumber3)
+ longNumber4 * longNumber5;
// 비추천
int longAnswer = longNumber1 * (longNumber2 + longNumber2
- longNumber3) + longNumber4 * longNumber5;
- 위 원칙이 코드를 더 복잡하게 한다면 8개의 빈 칸을 사용하여 들여쓴다.
public static synchorized veryLongMethod(String longArgument1,
Object longObject1, String longArgument3, String longArgument4,
String longArgument5) {
// TODO : something..
}
메서드 본문 시작시의 줄바꿈
- 일반적으로 메서드 본문이 시작할 때 4개의 빈 칸을 사용하므로, 메서드 본문과 구분하기 위해서 줄을 나누는 경우의 들여쓰기는 8개의 빈 칸 원칙을 사용한다.
// 좋지 않은 들여쓰기
if ((condition1 && condition2)
|| (condition3 && condition4)
|| !(condition5 && condition6)) {
doSomething(); // 메서드 본문 시작이 명확하지 않다.
}
// 좋은 들여쓰기
if ((condition1 && condition2) || (condition3 && condition4)
|| !(condition5 && condition6)) {
doSomething();
}
2. 주석
- 주석은 코드 자체만 가지고는 알 수 없는 추가적인 정보들을 제공하기 위하여 사용되어야 한다.
- 코드 상에 이미 표현되어 있는 중복 정보는 피해야 한다.
** 때로는 코드에 대한 주석이 많이 필요하다는 것은 코드의 품질이 좋지 않다는 것을 의미한다. 주석을 추가해야 한다고 느낄 때에는 코드를 좀 더 명확하게 작성하는 것을 고려해보는 것도 좋다.
블록 주석
블록 주석은 파일, 메서드 등의 설명을 제공할 때 사용된다.
블록 주석은 다른 코드들과 구분하기 위하여 처음 한 줄은 비우고 사용한다.
/*
* 여기서부터 블록 주석 시작
*/
한 줄 주석
짧은 주석은 뒤따라오는 코드와 동일한 들여쓰기를 하는 한 줄로 작성한다. 만약 주석이 한 줄에 다 들어가지 않는다면 위의 블록 주석 형식을 따라야 한다.
if (condition) {
// 이 조건을 만족하면 실행
// TODO : something..
}
꼬리 주석
아주 짧은 주석이 필요한 경우 코드와 같은 줄에 주석을 작성한다. 하지만 실제 코드와는 구분될 수 있도록 충분히 멀리 떨어뜨려야 한다.
if (condition) {
a = true; // 참인 경우
} else {
a = false; // 거짓인 경우
}
3. Statements
복합문
복합문은 중괄호 { statements } 로 둘러쌓여진 statements 이다.
- 둘러싸여진 statements 은 한 단계 더 들여쓰기를 한다.
- 여는 중괄호 { 는 한 칸 띄운 뒤 복합문을 시작하는 줄의 마지막에 위치한다.
- 닫은 중괄호 } 는 새로운 줄에 써야하고, 복합문의 시작과 같은 들여쓰기를 한다.
if, if-else, if else-if else
if 문은 항상 중괄호를 사용한다.
if (condition) {
// TODO : something..
}
if (condition1) {
// TODO : something..
} else if (condition2) {
// TODO : something..
} else {
// TODO : something..
}
// 아래와 같이 중괄호 {} 를 생략해서 사용하지 않는다.
if (condition)
// TODO : something..
if (condition) something..
4. While Space
한 줄 띄우기
한 줄을 띄우고 코드를 작성하면 논리적으로 관계가 있는 코드들을 쉽게 구분할 수 있기 때문에 코드의 가독성을 향상시킨다.
- 메서드들 사이에서
- 메서드 안에서의 지역 변수과 그 메서드의 첫 번째 문장 사이에서
- 블록 주석 또는 한 줄 주석 이전에
- 가독성을 향상시키기 위한 메서드 내부의 논리적인 섹션들 사이에서
공백
- 괄호와 함께 나타나는 키워드는 공백으로 나눈다.
if (condition) {
// TODO : do something...
}
- 메서드명과 메서드를 여는 괄호 사이에는 공백을 사용하지 않는다.
이렇게 하는 것은 메서드 호출과 키워드를 구별하는데 도움을 준다.
callMethod (arg1); // 잘못된 사용법
callMethod(arg1); // 올바른 사용법
- 공백은 인자리스트에서 콤마 이후에 사용한다.
callMethod(arg1, arg2);
- 변수의 타입을 변환하는 cast 의 경우 공백으로 구분한다.
callMethod((byte) num);
5. 기타
괄호
본인이 연산자 우선 순위를 확실하게 알고 있다고 할지라도, 다른 프로그래머를 위해 괄호를 사용한다.
if (a == b && c == d) // 잘못된 사용법
if ((a == b) && (c == d)) // 올바른 사용법