'style guide'에 해당되는 글 7건
02. source file structure :: 2021/11/17 10:38
개발자를 위한
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도 생성자나 메서드 사이에 있으면 안 됨) 순차적으로 나타납니다.
01. source file basics :: 2021/05/28 16:59
개발자를 위한
Java Programming Style Guide (ref. Google style guide)
1. Source file basics
- 파일 명
- 소스 파일 명은 대소문자를 구분하여 정확하게 하나만 있는 최상위 클래스와 .java 확장자로 이루어져 있습니다.
- 파일 인코딩 : UTF-8
- 소스 파일은 UTF-8로 인코딩 되어야 합니다.
- 특수 문자
- 공백 문자 (White space characters)
- 라인 종결자 문자열(sequence)을 제외하면, ASCII 가로 공백 문자(0x20)는 소스 파일의 어디서나 사용할 수 있는 유일한 공백 문자입니다.
- 문자열(string)과 문자 리터럴(character literals)에 있는 모든 다른 공백 문자들은 예외(escape)입니다.
- 탭(Tab) 문자는 들여쓰기(indentation)에 사용하면 안 됩니다.
- 특수 확장열 (Special escape sequences)
- 특수 확장열(special escape sequences)을 가진 모든 문자의 경우, 8진수(ex. \012)나 유니코드(\u000a) 특수문자 대신 해당 확장문자 (\b, \t, \n, \f, \r, \”, \’, \\)를 사용합니다.
- Non-ASCII 문자 (non-ASCII characters)
- 나머지 non-ASCII 문자의 경우, 실제 유니코드 문자(ex.∞)나 동등한 유니코드 특수문자(ex. \u221e)가 사용됩니다. 유니코드 특수문자가 문자열이나 주석 외부에서 사용되는 것은 정말 권장하지 않지만, 코드를 쉽게 읽고 이해할 수 있도록 만들기 위한 방법이라면 선택할 수 있습니다.
Tip : 유니코드 특수문자의 경우, 때때로 실제 유니코드를 사용하는 것이 주석을 설명하는데 매우 유용할 수 있습니다.
- Example
Example | Discussion |
String unitAbbrev = "μs"; | Best : 주석없이 완벽하게 명확함. |
String unitAbbrev = "\u03bcs"; // "μs" | Allowed : 하지만 이렇게 작성할 이유가 없음. |
String unitAbbrev = "\u03bcs"; // Greek letter mu, "s" | Allowed : 하지만 어색하고 실수하기 쉬움. |
String unitAbbrev = "\u03bcs"; | Poor : 독자는 이것이 무엇인지 전혀 모름. |
return '\ufeff' + content; // byte order mark | Good: 인쇄할 수 없는 문자에는 특수문자를 사용하고, 필요한 경우 주석 추가. |