개발자를 위한
Java Programming Style Guide (ref. Google style guide)
소스 파일 구조(Source file Structure)
소스 파일은 다음과 같은 순서로 구성되어 있습니다.
- 필요한 경우, 라이선스나 카피라이트 정보(License or Copyright Information)
- 패키지 선언문 (Package Statement)
- 임포트 선언문 (Import Statement)
- 유일한(Exactly One) 최상위 클래스(Top-Level Class)
위의 번호에 해당하는 각 섹션은 단 하나의 빈줄(Exactly one blank line)로 구분합니다.
라이선스나 카피라이트 정보(license or copyright information)
만약 소스 파일에 라이선스나 카피라이트 정보를 포함해야 한다면, 소스 파일의 맨 위에 첫번째로 작성합니다.
패키지 구문(package statement)
만약 소스 파일에 라이선스나 카피라이트 정보를 포함해야 한다면, 소스 파일의 맨 위에 첫번째로 작성합니다.
임포트 구문(import statements)
- 와일드카드 임포트 미사용(No wildcard imports)
정적이든 아니든(static or otherwise), 와일드카드 임포트(wildcard imports)는 사용하지 않습니다.
- 줄바꿈 미사용(No line-wrapping)
임포트 구문(import statement)은 줄바꿈하지 않습니다. 열 제한(column limit)도 임포트 구문에는 적용되지 않습니다. (소스코드에서는 100글자로 제한됩니다.)
- 순서와 간격(Ordering and Spacing)
임포트 구문에서는 다음과 같은 순서로 작성합니다.
1) 모든 정적 임포트(static import)는 단일 블록(single block)에 작성합니다.
2) 모든 비정적 임포트(non-static import)는 단일 블록(single block)에 작성합니다.
정적, 비정적 임포트 구문이 모두 있는 경우, 두 블록 사이는 단일 빈 줄로 구분합니다. 그 이외 임포트 구문 사이에는 빈줄이 없어야 합니다.
각 블록 내에서 임포트 선언된 이름은 ASCII 정렬 순서로 나타납니다.
Note : ‘.’가 ‘;’보다 먼저 정렬되기 때문에 ASCII 정렬 순서 내에 있는 임포트 구문과 동일하지 않습니다. 즉, ‘.’ 단위로 구분되는 경우, ‘.’ 단위로 ASCII 정렬 순서대로 정렬되어야 합니다.
- 클래스에 대해 정적 임포트 미사용(No static import for classes)
정적 임포트(static import)는 정적 중첩 클래스(static nested classes)에 사용하지 않습니다. 정적 중첩 클래스에 대해서는 일반적인 임포트(normal import)를 사용합니다.
클래스 선언(class declaration)
- 정확히 하나의 최상위 클래스 선언(Exactly one top-level class declaration)
소스 파일 내 최상위 클래스는 하나만 있어야 합니다.
- 클래스 내용의 순서(Ordering of class contents)
클래스의 멤버(member)와 초기자(initializer)에 대해 선택한 순서는 학습가능성(learnability)에 큰 영향을 미칠 수 있습니다. 하지만, 어떻게 올바르게 순서를 선택할지에 대한 단 하나의 완벽한 레시피(recipe)는 없습니다. 다른 클래스는 다른 방법으로 클래스 내 컨텐츠의 순서를 정렬할 수 있습니다.
중요한 것은, 관리자(maintainer)가 요구하면 설명할 수 있도록 각 클래스는 어떤 논리적인 순서(logical order)를 사용한다는 것입니다. 예를 들어, 논리적인 순서가 아닌, “추가된 날짜별(chronological by date added)” 순서로 나타나는 경우에는 새로운 메서드(method)는 습관적으로 클래스의 맨 끝에 추가되지 않습니다.
1) 오버로드(Overloads) : 절대로 분할하지 않아야 함
클래스에 여러 생성자(multiple constructors)가 있는 경우나 동일한 이름의 여러 메서드(method)가 있는 경우, 각 생성자나 메서드 사이에 다른 코드 없이(private member도 생성자나 메서드 사이에 있으면 안 됨) 순차적으로 나타납니다.
댓글을 달아 주세요
댓글 RSS 주소 : http://www.yongbi.net/rss/comment/886