구글 컨벤션
Java 코드는 Google Java Style Guide 를 따릅니다.
왜 직접 만들지 않고 남의 규칙을 쓰나
스타일 규칙은 내용보다 합의가 중요합니다. 들여쓰기 2칸이 4칸보다 나은 근거는 없지만, 섞여 있으면 diff 가 지저분해지고 리뷰에서 본질과 무관한 논쟁이 생깁니다.
널리 쓰이는 규칙을 채택하면 ① 논의 비용이 사라지고 ② 새 팀원이 이미 알고 있으며 ③ IDE·린터 설정이 기성품으로 존재합니다.
예외 — SQL DSL 블록
SQL DSL 은 키워드 우측정렬을 쓰므로 이 규칙의 자동 포맷 대상에서 뺍니다. //@formatter:off … //@formatter:on 으로 감싸세요 → 코드 포맷 규칙
1. Formatting
1.1 Block indentation
- 새 블록 또는 블록과 유사한 구조가 열릴 때마다 들여쓰기가 두 칸씩 증가
- sonarQube 에선 indent size 를 명시적으로 제시하진 않고 일관된 들여쓰기를 준수
1.2 One statement per line
- 각 문 뒤에는 줄바꿈
1.3 Column limit
- Java 코드의 열 제한은 100 자
2. Whitespace
수평 공백 (띄어쓰기)는 다음과 같이 나타낸다:
java
// 예약어 if, for 또는 catch 와 여는 괄호 ( 사이
// else 또는 catch 와 닫는 중괄호 } 사이
// 여는 중괄호 { 앞
if (조건) {
} else {
}
// 이항 또는 삼항 연산자의 양쪽
isEmpty ? true : false;
// 인접한 Type 바인딩의 앰퍼샌드 사이
<T extends Foo & Bar>
// catch 블록에 대한 파이프
catch (FooException | BarException e)
// foreach 문의 콜론 사이
for (Map item : itemList)
// 람다식의 화살표
(String str) -> str.length()예외
java
// 공백이 사용되지 않음
@SomeAnnotation({a, b})
// {{ 다음에 사용하지 공백을 않음
String[][] x = {{"foo"}};
// 메서드 참조시 사용되는 콜론 :: 에 공백을 사용하지 않음
Object::toString3. Naming
sonarQube 에서 Naming 은 설정된 정규식으로 체크된다.
3.1 Package 이름
- 패키지 이름은 모두 소문자이며 연속된 단어는 단순히 함께 연결
- 올바른 예:
com.example.deepspacenot - 잘못된 예:
com.example.deepSpace,com.example.deep_space
3.2 Class 이름
- UpperCamelCase 로 작성
- 보통 명사 또는 명사로 작성
- Interface 이름은 형용사 또는 형용사구를 사용할 수 있음 (예:
Readable) - Test Class 이름은 테스트할 클래스 이름으로 시작하고
Test를 끝에 붙임 (예:MyClassTest)
sonarQube 에서의 Test Class 네이밍
Test혹은IT+ 클래스 이름- 클래스 이름 +
Test또는Tests또는TestCase또는IT또는ITCase
3.3 Method 이름
- lowerCamelCase 로, 동사 또는 동사구로 작성
- Test Method 의 올바른 네이밍은 없음
- sonarQube:
test+ 메서드 이름으로 작성