주의
- 구글 자바 코딩 컨벤션이 표준은 아니다.
용어
- class 라는 용어는 class, enum class, interface, 각 어노테이션 유형을 의미하기 위해 포괄적으로 사용됨.
- class 내의 member 라는 용어는 중첩된 클래스, 필드, 메소드, 생성자를 의미하기 위해 포괄적으로 사용됨.
- comment라는 용어는 항상 주석을 의미함.
소스 파일 기본 사항
- 파일 이름은 파일 내 최상위 클래스의 대소문자가 구분된 이름과 .java 확장자로 구성됨.
- 소스 파일은 UTF-8로 인코딩 됨.
- 탭 문자는 들여 쓰기에 사용되지 않음.
- non-ascii 문자는 코드를 더 쉽게 읽고 이해할 수 있는 방법에 따라 실제 유니코드 문자 또는 동등한 유니 코드 이스케이프가 사용됨. (ex) ∞과 \u221e)
- 일부 프로그램이 non-ascii문자를 제대로 처리하지 못할 수 있다는 두려움 때문에 코드의 가독성을 낮추는 것은 좋지 않음.
소스 파일 구조
- 소스 파일의 구성 순서
- 라이센스 또는 저작권 정보 (있는 경우)
- package 구문
- import 구문
- 정확히 하나의 최상위 Class
이 때 각 섹션은 정확히 하나의 빈 줄 만으로 구분되어야 함.
package & import
- package문 및 import문은 후술할 열 제한 100자에 제한받지 않음.
- import문에서 와일드 카드는 사용하면 안되고 줄 바꿈 또한 불가하다.
- static import, non-static import 순으로 모아서 작성하고 하나의 빈 줄이 두 블록을 구분한다.
- 각 블록 내의 import 문들은 Ascii 정렬 순서를 따른다.
class
- 클래스의 멤버의 순서에 대해 정해진 방법은 없다. 그러나 관리자가 요청하면 설명할 수 있을 만큼의 논리적 순서는 사용해야 한다.
- (ex) 습관적으로 새로운 메소드를 추가할 때마다 맨 뒤에 작성했다면, 이는 논리적 순서가 아닌 “:추가 된 날짜 별 시간순” 순서임)
- Overload되는 메소드들은 같은 위치 분할 없이 같은 블록에 나타나야 한다.
- 이는 동일한 이름을 가진 여러 생성자나 메서드의 경우도 마찬가지이다.
서식
괄호
- if, else, for, do 및 while문의 경우 body가 비어있거나 단 한 줄의 내용만 있더라도 중괄호가 생략되어서는 안된다.
- body가 비어있지 않는 경우 다음을 따른다.
- 여는 중괄호 앞에 줄 바꿈 없음.
- 여는 중괄호 뒤에 줄 바꿈.
- 닫는 중괄호 앞의 줄 바꿈.
- 닫는 중괄호 뒤의 줄 바꿈. 다만 뒤에 else나 ,가 오는 경우 줄 바꿈 없음.
- body가 비어있는 경우는 다음을 따른다.
- 여는 중괄호 뒤에 줄 바꿈은 선택이다. (간결한 빈 블럭 사용 가능)
- 다만 else나 else if가 붙는 if, else if, else, try, catch같이 멀티 블럭 구문에서는 간결한 빈 블럭의 사용이 불가능하다.
공백
- 새 블록 또는 블록과 유사한 구조가 열릴 때마다 공백 두 번을 들여쓰기로 사용한다.
- 블록이 끝나면 들여쓰기는 이전 들여쓰기 수준으로 돌아간다.
- 이는 전체 코드 및 주석 모두에 적용된다.
- 세로 공백은 보통 하나의 빈 줄을 사용한다. 여러 개의 빈 줄이 허용되지만 권장은 아니다.
- 클래스의 멤버, 정적 초기화 및 인스턴스 사이에 세로 공백이 들어간다.
한 줄
- 한 줄에는 하나의 문만이 들어가야 하며 각 문 뒤에는 줄 바꿈이 있다.
- 한 줄의 열 제한은 100글자이다. 이 때 한 글자는 모든 유니 코드 코드 포인트를 의미한다.
- 따라서 일본어, 한자, 한글, 숫자 등을 이용하는 경우 너비와 상관 없이 먼저 줄 바꿈하도록 선택할 수 있다.
- 앞서 언급했듯이 import 및 package 문은 제외된다.
- 이 외에 일부 제외되는 케이스에는 reference 참조.
네이밍
Package Name
- 모두 소문자이다.
- 연속된 단어는 밑줄 없이 단순히 함께 연결된다.
Class Name
- 대문자로 시작하는 UpperCamelCase로 작성된다.
- 일반적으로 명사 혹은 명사 구이다. 그러나 때로는 형용사 구일 수도 있다.
- 어노테이션 유형 이름의 경우 특정 규칙은 없다.
- 테스트 클래스의 이름은 테스트중인 클래스의 이름에 Test를 붙여준다.
Method Name
- 소문자로 시작하는 lowerCamelCase로 작성된다.
- 일반적으로 동사 혹은 동사 구이다.
- Junit 테스트 메소드의 이름엔 논리적 구성 요소를 구분하기 위해 _ 를 사용할 수 있다.
- 테스트 메소드의 이름을 작성하는 올바른 방법은 없다.
Constant Name
- 모두 대문자로 표시한다.
- 각 단어는 _ 로 구분한다.
상수를 제외한 나머지 필드
- 소문자로 시작하는 lowerCamelCase로 작성된다.
- 일반적으로 명사 혹은 명사 구이다.
Parameter
- 소문자로 시작하는 lowerCamelCase로 작성된다.
- 공용 메소드에서 한 문자로 이루어진 이름은 권장되지 않는다.
Local Variable
- 소문자로 시작하는 lowerCamelCase로 작성된다.
- final이나 불변인 경우에도 지역 변수는 상수로 간주되지 않으며 상수의 Naming 방식을 따라서도 안된다.