03. formatting - 01 :: 2021/11/17 16:45
개발자를 위한
Java Programming Style Guide (ref. Google style guide)
4. 서식(Formatting)
Terminology Note(용어 참고) : 블록과 유사한 구성(block-like construct)은 클래스(class), 메서드(method)나 생성자(constructor)의 본문(body)를 나타냅니다. 단, 모든 배열 초기자(array initializer)는 선택적으로 블록과 유사한 구성으로 작성될 수 있습니다.
4.1 중괄호(braces)
- 중괄호를 선택적으로 사용하는 경우
중괄호는 본문이 비어 있거나, 단일 구문만 포함하고 있는 경우에도, if, else, for, do, while 문과 함께 사용됩니다.
- 비어 있지 않은 블록 (K&R Style)
중괄호는 비어 있지 않은 블록이나 블록과 유사한 구성에K&R Style(Kernighan and Ritchie Style) (“이집트 대괄호”)를 따릅니다.
- 여는 중괄호(opening brace) 전에는 줄바꾸지 않습니다(No line break).
- 여는 중괄호 다음에는 줄바꿈합니다(Line break).
- 닫는 중괄호(closing brace) 전에 줄바꿈합니다.
- 만약 구문이 종료되거나, 메서드나 생성자, 명명된 클래스의 본문이 종료되는 경우, 닫는 중괄호 다음에 줄바꿈합니다. 예를 들어, else나 쉼표(comma)가 뒤에 오는 경우에는 닫는 중괄호 다음에 줄 바꿈을 하지 않습니다.
<실제 사용 예>
return () -> {
while (condition()) {
method();
}
};
return new MyClass() {
@Override public void method() {
if (condition()) {
try {
something();
} catch (ProblemException e) {
recover();
}
} else if (otherCondition()) {
somethingElse();
} else {
lastThing();
}
}
};
다만, 열거형 클래스(Enum Class)에는 몇 가지 예외가 있습니다.
- 빈 블록(Empty blocks) : 잘 활용하면 간결해질 수 있음
빈 블록이나 블록과 유사한 구성을 K&R Style(Kernighan and Ritchie Style)로 작성할 수 있습니다. 다중 블록 구문(여러 블록을 직접적으로 포함하는 if/else, try/catch/finally 구문처럼)의 일부가 아닌 한, 중괄호({}) 사이에 문자나 줄바꿈 없이 중괄호 오픈 후, 바로 닫을 수 있습니다.
<실제 사용 예>
// This is acceptable
void doNothing() {}
// This is equally acceptable
void doNothingElse() {
}
// This is not acceptable: No concise empty blocks in a multi-block statement
try {
doSomething();
} catch (Exception e) {}
4.2 블록 들여쓰기(block indentation) : +2 스페이스(spaces)
새로운 블록이나 블록과 유사한 구성을 작성할 때마다 들여쓰기는 2개의 스페이스만큼 늘어납니다. 블록이 끝날 때, 들여쓰기는 바로 이전 들여쓰기 수준으로 돌아갑니다. 들여쓰기는 코드와 주석 모두에 적용됩니다.
4.3 한 줄에 하나의 구문(one statement per line)
각 구문의 끝에서는 줄바꿈을 해야 합니다.
4.4 열 제한(column limit) : 100
Java 코드의 열 제한은 100글자입니다. “글자”는 유니코드를 의미합니다. 아래 명시된 경우를 제외하면, 이 제한 조건을 초과하는 모든 라인은 줄바꿈을 해야 합니다.
Note : 각 유니코드는 표시되는 너비가 더 크거나 더 작더라도 한 글자로 계산됩니다. 예를 들어, 전각 문자를 사용하는 경우, 이 규칙에서 엄격하게 요구하는 것보다 먼저 줄바꿈하도록 선택할 수 있습니다. (전각문자 : 일반적인 영문자의 고정 폭의 두 배 정도의 폭을 가지는 문자)
<예외>
- 열 제한 규칙을 준수할 수 없는 경우(예: Javadoc의 긴 URL이나 긴 JSNI 메서드 참조)
- 패키지 구문(package statement) 및 임포트 구문(import statements)
- 쉘(shell)에 복사 후 붙여넣기(copy & paste)할 수 있는 주석 내 명령어 라인(command line)
4.5 라인 변경(line-wrapping)
Terminology Note(용어집): 한 줄로 작성할 수 있는 코드가 여러 줄로 나뉘는 경우, 이러한 활동을 라인 변경이라고 합니다.
모든 상황에서 어떻게 라인을 변경 해야 하는지 정확하게 보여주는 포괄적이고 결정적인 공식은 없습니다. 다만, 자주 동일한 코드 조각을 라인 변경하는 몇 가지 적절한 방법이 있을 뿐입니다.
Note : 라인 변경하는 일반적인 이유는 열 제한(column limit)을 넘어가는 경우를 방지하기 위한 것입니다. 하지만, 열 제한을 만족시키는 코드라도 작성자의 재량에 따라 라인을 변경할 수 있습니다.
Tip : 메서드(method)나 지역 변수(local variable)를 추출하면 라인 변경없이 문제를 해결할 수 있습니다.
- 어디에서 라인 변경할 것인가
라인 변경의 주요 지시문(prime directive) : 더 높은 구문 수준에서 줄바꿈하는 것을 선호
1) 비 할당된 연산자(non-assignment operator)에서 줄이 끊어질 경우, 기호(symbol)앞에서 라인을 변경합니다. (C++이나 JavaScript와 같은 다른 언어의 Style과 동일하지 않습니다.)
- 다음 “연산자와 유사한(operator-like)” 기호에도 적용됩니다.
- 점 구분자(dot separator: ‘.’)
- 메서드(method) 참조를 위한 2개의 콜론(::)
- 타입 바운드(Type Bound) 내 &(<T extends Foo & Bar>)
- Catch 블록 내 Pipe(catch (FooException | BarException e))
2) 할당된 연산자(assignment operator)에서 줄이 끊어질 경우, 일반적으로 기호(symbol)뒤에서 라인 변경하지만 어느 쪽이든 허용합니다.
- 더 향상된 for 구문(“foreach”)의 “할당 연산자와 유사한(assignment-operator-like)” 콜론에도 적용됩니다.
3) 메서드(method)나 생성자(constructor) 이름 바로 다음에 여는 괄호(()를 작성합니다.
4) 쉼표(,)는 앞에 오는 토큰 바로 다음에 작성합니다.
5) 람다의 본문이 중괄호가 없는 단일 표현으로 이루어진 경우 화살표 바로 다음에 줄이 끊어질 수 있다는 것을 제외하면, 람다의 화살표 옆에서 줄이 끊어지지 않아야 합니다.
<실제 사용 예>
- 일반적인 람다
MyLambda<String, Long, Object> lambda =
(String label, Long value, Object obj) -> {
...
};
- 중괄호가 없는 단일 표현으로 이루어진 람다
Predicate<String> predicate = str ->
longExpressionInvolving(str);
Note : 라인 변경의 주요 목표는 코드를 명확하게 하는데 있습니다. 가장 짧은 코드를 작성하기 위한 것은 아닙니다.
- 연속 줄 들여쓰기(Indent continuation lines) : 최소 +4 스페이스 (at least +4 spaces)
라인 변경할 때 첫번째 줄 이후 각 줄(연속하는 줄 포함)은 원래에서 최소한 +4 스페이스로 들여쓰기 합니다.
연속 행이 여러 개인 경우 원하는 대로 들여쓰기를 +4 이상으로 변경할 수 있습니다. 일반적으로 2개의 연속 행일 경우에는 구문적으로 병렬 요소(parallel element)일 경우에만 동일한 들여쓰기 수준을 사용합니다.
이후에 정리된 수평 정렬(Horizontal Alignment)에서는 특정 토큰을 이전 라인과 정렬하기 위해서 다양한 숫자의 스페이스를 사용하는, 권장하지 않는 실제 사례들을 다룹니다.
-
Child inclusive mediation
Tracked from Child inclusive mediation | 2022/05/24 14:27 | DELGreat Architect & Artist -
-
gutter repair
Tracked from gutter repair | 2022/05/24 14:28 | DELGreat Architect & Artist -
-
good vibes neon sign
Tracked from good vibes neon sign | 2022/05/24 15:26 | DELGreat Architect & Artist -
-
strength training
Tracked from strength training | 2022/05/24 16:13 | DELGreat Architect & Artist -
-
beauty products
Tracked from beauty products | 2022/05/25 16:00 | DELGreat Architect & Artist -
-
government security courses
Tracked from government security courses | 2022/05/26 19:09 | DELGreat Architect & Artist -
-
PTS Terbaik ASEAN
Tracked from PTS Terbaik ASEAN | 2022/05/28 21:03 | DELGreat Architect & Artist -
-
crypto atm
Tracked from crypto atm | 2022/05/29 03:07 | DELGreat Architect & Artist -
-
Goldshell CK6 19.3Th Nervos Miner
Tracked from Goldshell CK6 19.3Th Nervos Miner | 2022/05/29 04:12 | DELGreat Architect & Artist -
-
Canaan Avalon 1246 90Th Bitcoin miner
Tracked from Canaan Avalon 1246 90Th Bitcoin miner | 2022/05/29 23:02 | DELGreat Architect & Artist -
-
limo hire London
Tracked from limo hire London | 2022/05/30 13:29 | DELGreat Architect & Artist -
-
Scam Stories
Tracked from Scam Stories | 2022/06/01 13:54 | DELGreat Architect & Artist -
-
ดูหนังออนไลน์
Tracked from ดูหนังออนไลน์ | 2022/06/01 14:39 | DELGreat Architect & Artist -
-
Wordpress website laten maken Haarlem
Tracked from Wordpress website laten maken Haarlem | 2022/06/01 17:35 | DELGreat Architect & Artist -
-
forex binary options
Tracked from forex binary options | 2022/06/02 18:39 | DELGreat Architect & Artist -
-
asphalt driveway
Tracked from asphalt driveway | 2022/06/03 05:29 | DELGreat Architect & Artist -
-
acne facial
Tracked from acne facial | 2022/06/04 14:37 | DELGreat Architect & Artist -
-
Thailand Travel Agency
Tracked from Thailand Travel Agency | 2022/06/04 17:29 | DELGreat Architect & Artist -
-
PD Training
Tracked from PD Training | 2022/06/06 23:19 | DELGreat Architect & Artist -
-
пересадка волос
Tracked from пересадка волос | 2022/06/06 23:48 | DELGreat Architect & Artist -
-
flight reservation for canada visa application
Tracked from flight reservation for canada visa application | 2022/06/06 23:53 | DELGreat Architect & Artist -
-
hotel reservation for canada visa
Tracked from hotel reservation for canada visa | 2022/06/07 02:11 | DELGreat Architect & Artist -
-
web developer Dallas Texas
Tracked from web developer Dallas Texas | 2022/06/07 19:29 | DELGreat Architect & Artist -
-
web developer Dallas Texas
Tracked from web developer Dallas Texas | 2022/06/08 02:39 | DELGreat Architect & Artist -
-
new technologies
Tracked from new technologies | 2022/06/08 04:00 | DELGreat Architect & Artist -
-
booking tiket pesawat untuk visa
Tracked from booking tiket pesawat untuk visa | 2022/06/08 18:10 | DELGreat Architect & Artist -
-
cable de alimentación eléctrico
Tracked from cable de alimentación eléctrico | 2022/06/09 16:30 | DELGreat Architect & Artist -
-
Great Clips Coupons Facebook
Tracked from Great Clips Coupons Facebook | 2022/06/09 23:32 | DELGreat Architect & Artist -
-
GoldShell CK5 12Th Nervos (CKB) Miner
Tracked from GoldShell CK5 12Th Nervos (CKB) Miner | 2022/06/10 19:02 | DELGreat Architect & Artist -
-
bandar lotre indonesia
Tracked from bandar lotre indonesia | 2022/06/10 23:36 | DELGreat Architect & Artist -
-
Belmont il
Tracked from Belmont il | 2022/06/11 15:26 | DELGreat Architect & Artist -
-
binary options
Tracked from binary options | 2022/06/12 12:49 | DELGreat Architect & Artist -
-
bandar togel online
Tracked from bandar togel online | 2022/06/14 14:36 | DELGreat Architect & Artist -
-
israeli tv
Tracked from israeli tv | 2022/06/15 16:09 | DELGreat Architect & Artist -
-
driving defense school
Tracked from driving defense school | 2022/06/16 15:18 | DELGreat Architect & Artist -
-
hair dryer and straightener set
Tracked from hair dryer and straightener set | 2022/06/17 14:07 | DELGreat Architect & Artist -
-
Quality Marijuana Edibles for sale Online UK
Tracked from Quality Marijuana Edibles for sale Online UK | 2022/06/17 16:45 | DELGreat Architect & Artist -
-
babyliss curling tongs for short hair
Tracked from babyliss curling tongs for short hair | 2022/06/17 17:50 | DELGreat Architect & Artist -
-
iphone bình dương
Tracked from iphone bình dương | 2022/06/17 23:10 | DELGreat Architect & Artist -
-
Car shipping & auto transport service
Tracked from Car shipping & auto transport service | 2022/06/18 22:12 | DELGreat Architect & Artist -
-
trik main slot menang terus
Tracked from trik main slot menang terus | 2022/06/18 23:38 | DELGreat Architect & Artist -
-
buy dmt online
Tracked from buy dmt online | 2022/06/18 23:46 | DELGreat Architect & Artist -
-
development life skills ndis
Tracked from development life skills ndis | 2022/06/19 05:20 | DELGreat Architect & Artist -
-
ndis registered providers
Tracked from ndis registered providers | 2022/06/19 09:32 | DELGreat Architect & Artist -
-
ndis approved shops
Tracked from ndis approved shops | 2022/06/19 10:37 | DELGreat Architect & Artist -
-
Marketing services
Tracked from Marketing services | 2022/06/20 16:57 | DELGreat Architect & Artist -
-
Digital marketing freelancer
Tracked from Digital marketing freelancer | 2022/06/20 19:31 | DELGreat Architect & Artist -
-
flight + Hotel
Tracked from flight + Hotel | 2022/06/21 06:05 | DELGreat Architect & Artist -
-
signs plan b didn't work
Tracked from signs plan b didn't work | 2022/06/21 13:34 | DELGreat Architect & Artist -
-
night vision scope attachment
Tracked from night vision scope attachment | 2022/06/23 21:51 | DELGreat Architect & Artist -
-
daftar spvtoto
Tracked from daftar spvtoto | 2022/06/24 00:38 | DELGreat Architect & Artist -
-
login sistoto
Tracked from login sistoto | 2022/06/24 14:53 | DELGreat Architect & Artist -
-
login sistoto
Tracked from login sistoto | 2022/06/24 18:03 | DELGreat Architect & Artist -
-
Fennec fox for sale
Tracked from Fennec fox for sale | 2022/06/24 23:17 | DELGreat Architect & Artist -
-
Austin food truck catering
Tracked from Austin food truck catering | 2022/06/25 05:52 | DELGreat Architect & Artist -
-
chipotle catering
Tracked from chipotle catering | 2022/06/25 09:23 | DELGreat Architect & Artist -
-
central market austin catering menu
Tracked from central market austin catering menu | 2022/06/25 09:49 | DELGreat Architect & Artist -
-
austin best dining
Tracked from austin best dining | 2022/06/25 10:47 | DELGreat Architect & Artist -
-
buy fennec fox online
Tracked from buy fennec fox online | 2022/06/25 18:51 | DELGreat Architect & Artist -
-
fennec foxes for sale
Tracked from fennec foxes for sale | 2022/06/25 19:22 | DELGreat Architect & Artist -
-
Fennec fox breeders
Tracked from Fennec fox breeders | 2022/06/25 21:56 | DELGreat Architect & Artist -
-
Lainaa 5000
Tracked from Lainaa 5000 | 2022/06/26 21:25 | DELGreat Architect & Artist -