2023ë 2ì 15ìŒ ìì±
Google Java Style Guide ì묞 ë§í¬
êž°ì¡Ž ê²ì ê²°ê³Œë¡ ì°Ÿì 볌 ì ìë ìë£ë€ì ëëœ, ë³ê²œ, ìŽìí ë¶ë¶ìŽ ììŽ ìµì ííê³ ê°ë¥í 맀ëëœê² ìœí ì ìê² ì 늬íìµëë€.
ì€ììŽ ìì ì ììŒë©° ì ëì ìŒë¡ ì벜í ìë£ê° ìëì ì늜ëë€.
ì€íìë ì€ì ë± ì못ë ë¶ë¶ìŽ ë°ê²¬ë ê²œì° ê¹í ìŽìë 벚ë¡ê·ž ëêž ë±ìŒë¡ ìë €ì£Œìë©Ž ìŠì ë°ìíê² ìµëë€.
ìŽ ë¬žìë Javaâ¢ïž ìžìŽë¥Œ ìŽì©í ìì€ìœëì ëí Google ìœë© ê·ì¹ì ìì í ì ì륌 ì ê³µí©ëë€. Javaâ¢ïž ìì€ íìŒì ì¬êž° ìë 몚ë ê·ì¹ë€ì ì€ì í 겜ì°ìë§ Google ì€íìŒë¡ ì€ëª ë©ëë€.
ë€ì íë¡ê·žëë° ì€íìŒê³Œ ê°ìŽ, ë€ë£šë ìŽìë€ì í¬ë§€í ì 믞ì 묞ì ë¿ë§ ìëëŒ ë€ë¥ž ì íì 컚벀ì ìŽë ìœë© ê·ì¹ìë ì ì© ë©ëë€. ê·žë¬ë ìŽ ë¬žìë 볎ížì ìŒë¡ ë°ë¥Žë ì격í ê·ì¹ì ìŽì ì ë§ì¶ê³ ììµëë€. ê·žëŠ¬ê³ (ì¬ëìŽë ë구 ê°ì) ëª ííê² ê°ì í ì ìë ì¡°ìžì ì ê³µíëê²ì íŒí©ëë€.
ìŽ ë¬žììì í¹ë³ìŽ ëª ìíì§ ìë í:
- ì©ìŽ
class(íŽëì€)
ë "ìŒë°ì ìž" íŽëì€ë ìŽê±°í íŽëì€, ìží°íìŽì€, ìŽë ží ìŽì ì í(@interface
)ì í¬êŽì ìŒë¡ ì믞íëë° ì¬ì©ë©ëë€. - íŽëì€ì
ë©€ë²
ë ì€ì²©ë íŽëì€ë íë, ë©ìë, ìì±ì ê°ì ìŽëì ëŒìŽì ì 죌ìì ì ìží íŽëì€ì 몚ë ìµìì ìœí ìž ë¥Œ í¬êŽì ìŒë¡ ì믞í©ëë€. Comment(죌ì)
ë íì 구í 죌ìì ì믞í©ëë€. ì°ëŠ¬ëdocumentation comments
ëŒë ì©ìŽë¥Œ ì¬ì©íì§ ìê³ , ëìJavadoc
ìŽëŒë ìŒë°ì ìž ì©ìŽë¥Œ ì¬ì©í©ëë€.
ìŽ ë¬žììì ìë ìì ìœëë íì€ìŽ ìëëë€. ìŠ, ìì ë Google ì€íìŒìŽì§ë§ ìœë륌 íííë ì ìŒíê³ ìžë šë ë°©ë²ì ì ê³µíì§ ëª»í ì ììµëë€. ìì ììì ë§ë€ìŽì§ ì íì íì ì§ì (Optional formatting choices)ì ê·ì¹ìŒë¡ ê°ì ëë©Ž ìë©ëë€.
ìì€ íìŒì ìŽëŠì ëì묞ì륌 구ë¶íë ìµìì íŽëì€ ìŽëŠ(ì íí íëì ìŽëŠ)곌 .java
íì¥ìë¡ êµ¬ì±ë©ëë€.
ìì€íìŒì UTF-8ë¡ ìžìœë©ë©ëë€.
ê°í묞ì(ì묞ì 'line terminator ') ìíì€ë¥Œ ì ìžíê³ **ASCII horizontal space character (0x20)**ë ìì€ íìŒ ëŽë¶ìì ëíëë ì ìŒí 공백묞ìì ëë€. ìŽê²ì ë€ìì ëíë ëë€.:
- 묞ììŽê³Œ 묞ì 늬í°ëŽ ëŽë¶ì ë€ë¥ž 공백묞ìë íì¶ ì²ëŠ¬ ë©ëë€.
- í 묞ìë ë€ì¬ì°êž°ì ì¬ì©ëì§ ììµëë€.
í¹ìí íì¶ ìíì€ë¥Œ ê°ì§ 묞ìë€(\b
곌 \t
, \n
, \f
, \r
, \"
, \'
, \\
)ì íŽë¹ ì§ì(ì. \012
) ëë ì ëìœë(ì. \u000a
) íì¶ ëì íŽë¹ 묞ìê° ì¬ì©ë©ëë€.
ìì€í€ìœë ìž ëëšžì§ ë¬žìì 겜ì°, ì€ì ì ëìœë 묞ì(ì. â
)ëë ê°ì ì ëìœë íì¶(ì. \u221e
)ìŽ ì¬ì©ë©ëë€. ìœë륌 ë ìœê² ìœê³ ìŽíŽí ì ìë ë°©ë²ì ë°ëŒ ì¬ì© í ì ìì§ë§ ì ëìœëê° ë¬žììŽ ëŠ¬í°ëŽìŽë 죌ì ìžë¶ìì íì¶íëê²ì ê¶ì¥ëì§ ììµëë€.
í: ì ëìœë íì¶ ìŒìŽì€ë ì€ì ì ëìœë 묞ìê° ì¬ì©ëë 겜ì°, ì€ëª íë 죌ììŽ ë§€ì° ëì ë ì ììµëë€.
ìì:
Example | Discussion |
---|---|
String unitAbbrev = "ÎŒs"; | ìµê³ : 죌ììŽ ìì§ë§ ê°ì¥ ëª íí©ëë€ |
String unitAbbrev = "\u03bcs"; // "ÎŒs" | íì©ëì§ë§, ìŽë ê² ì¬ì© í ìŽì ê° ììµëë€. |
String unitAbbrev = "\u03bcs"; // Greek letter mu, "s" | íì©ëì§ë§, ìŽìíê³ ì€ìíêž° ìœìµëë€. |
String unitAbbrev = "\u03bcs"; | ëìš: ìŽê²ìŽ 묎ììžì§ ì ì ììµëë€. |
return '\ufeff' + content; // byte order mark | ì¢ì: ì¶ë ¥í ì ìë 묞ììë íì¶ë¬žì륌 ì¬ì©íê³ , íìí ê²œì° ì£Œìì ì¬ì©í©ëë€. |
í: ìŒë¶ íë¡ê·žëšìŽ Non-ASCII 묞ì륌 ì ëë¡ ì²ëŠ¬íì§ ëª»í ìë ìë€ë ê² ë묞ì ìœë ê°ë ì±ì í¬êž°íì§ ë§ìžì. ë§ìœ ê·žë° ìŒìŽ ë°ìíë€ë©Ž, íŽë¹ íë¡ê·žëšë€ìŽ ì€ëšëê³ ìì ëìŽìŒ í©ëë€.
ìì€ íìŒì ë€ì ììë¡ êµ¬ì±ë©ëë€.:
- ëŒìŽìŒì€ë ì ì¥ê¶ ì 볎(ìë€ë©Ž)
- íší€ì§ ì ìž
- ìí¬íž 구묞ë€
- ì íí íëì ìµìì íŽëì€
ì íí íëì ë¹ ì€ìŽ ê° ì¹ì ì 구ë¶í©ëë€.
ëŒìŽìŒì€ë ì ì¥ê¶ ì ë³Žê° íìŒì í¬íšëìŽ ìë€ë©Ž ì¬êž°ì íŽë¹í©ëë€.
íší€ì§ ì ìžì ì€ ë°ê¿ëì§ ììµëë€. íší€ì§ë¬žìë ìŽ ì í (ì¹ì 4.4 ì°žê³ , ìŽ ì í: 100)ì ì ì©íì§ ììµëë€.
static ëë êž°í ììŒë 칎ë ìí¬ížë ì¬ì©í ì ììµëë€.
ìí¬íž 구묞ë€ì ì€ ë°ê¿ëì§ ììµëë€. ìí¬íž 구묞ë€ìë ìŽ ì í (ì¹ì 4.4 ì°žê³ , ìŽ ì í: 100)ì ì ì©íì§ ììµëë€.
ìí¬íž 구묞ë€ì ë€ì곌ê°ìŽ ì ë ¬í©ëë€.:
- ëšìŒëžë¡ìì 몚ë static ìí¬íž 구묞ë€.
- ëšìŒëžë¡ì 몚ë non-static ìí¬íž 구묞ë€.
ë§ìœ static ìí¬ížì non-static ìí¬ížê° 몚ë ì¡Žì¬íë€ë©Ž, íëì ë¹ ì€ìŽ ë ëžë¡ì 구ë¶í©ëë€. ê° ìí¬ížë¬ž ì¬ìŽìë ë¹ ì€ìŽ ììµëë€.
ê° ëžë¡ëŽìì ìí¬íž í ìŽëŠì ASCII ì ë ¬ êž°ì€ìŒë¡ ì ë ¬í©ëë€.(ì°žê³ : "."ê° ";" ìì ì ë ¬ëë¯ë¡ ASCII ì ë ¬ ìììž ìí¬íž 구묞곌 ë€ëŠ ëë€.)
static ì€ì²© íŽëì€ë static ìí¬ížê° ì¬ì©ëì§ ììµëë€. ìŒë° ìí¬ížë¥Œ ì¬ì©ë©ëë€.
ìì€íìŒë³ ê°ì íëì ìµìì íŽëì€ë¥Œ ê°ì§ëë€.
íŽëì€ ë©€ë²ë ìŽëì ëŒìŽì ì ì ë ¬ ììë ìŽíŽíëë° í° ìí¥ì 믞칩ëë€. ê·žë¬ë, ëª íí ì íŽì§ ë°©ë²ì ììµëë€. ë€ë¥ž íŽëì€ë ë€ë¥ž ë°©ììŒë¡ ëŽì©ì ìì륌 ì í ì ììµëë€.
ì€ìíê²ì ê° íŽëì€ê° ëªê°ì§ êŽëŠ¬ìê° ìì²íë©Ž ì€ëª í ì ììŽìŒ íë ë ŒëŠ¬ì ìì륌 ì¬ì©íëê² ì ëë€. ì륌ë€ë©Ž, ì ë©ìëê° ìµêŽì ìŒë¡ íŽëì€ ëì ì¶ê°ëìë€ë©Ž ìŽë "ì¶ê°ë ììì" ì ë ¬ìŒ ë¿ ë ŒëŠ¬ì ììê° ìëëë€.
íŽëì€ ëŽë¶ì ê°ì ìŽëŠì ê°ì§ ë©ìëê° ì¬ë¬ê° ìë ê²œì° ìŽë€ ì¬ìŽì ë€ë¥ž ìœë ììëë¡ ëíëŽìŒ í©ëë€. ìŽë ì¬ë¬ê°ì ìì±ìê° ìë 겜ì°(ê°ì ìŽëŠì ê°ì§)ë íŽë¹ë©ëë€. ìŽ ê·ì¹ì static
ìŽë private
ê°ì ì ê·Œì íìê° ë©ìëë³ë¡ ë€ë¥ž 겜ì°ìë ì ì©ë©ëë€.
ì©ìŽ ì°žê³ : block-like 구조ë íŽëì€ëë ë©ìë, ìì±ìì 볞묞ì ëíë ëë€. ë°°ìŽ ìŽêž°íì ì¹ì 4.8.3.1ì ë°ëŒ 몚ë ë°°ìŽ ìŽêž°íë ì íì ìŒë¡ block-like êµ¬ì¡°ë¡ ì²ëŠ¬ë ì ììµëë€.
êŽížë if
ì else
, for
, do
, while
묞ì ëŽì©ìŽ ë¹ìŽìê±°ë íëì 묞ì¥ìŽ ìë 겜ì°ìë ì¬ì©ë©ëë€.
ëë€íí ê°ì ë€ë¥ž ì íì êŽížë íŽë¹ëì§ ììµëë€.
ë¹ìŽìì§ ìê±°ë block-like 구조ìì êŽížë Kernighan & Ritchie ì€íìŒ("ìŽì§íž ëêŽíž")ì ë°ëŠ ëë€.:
- ìë ììží ì€ëª ë 겜ì°ë¥Œ ì ìžíê³ , ì¬ë êŽíž ììë ì€ë°ê¿ìŽ ììµëë€.
- ì¬ë êŽíž ë€ìì ì€ì ë°ê¿ëë€.
- ë«ë êŽíž ììì ì€ì ë°ê¿ëë€.
- ë«ë êŽíž ë€ììë ë«ë êŽížê° 묞ì¥ì ëëŽë 겜ì°ë ë©ìëë ìì±ì, ëª
ëª
ë íŽëì€ì 볞묞ì ì¢
ë£íë 겜ì°ìë§ ì€ì ë°ê¿ëë€. ì륌 ë€ìŽ,
else
ë ìŒíê° ë°ëŒì€ë 겜ì°ìë ì€ë°ê¿ìŽ ììµëë€.
ììž ì¬í: ìŽ ê·ì¹ë€ìŽ ìžë¯žìœë¡ (;)ìŒë¡ ëëë íëì 묞ì¥ì íì©íë ìì¹ììë ë¬žì¥ ëžë¡ìŽ ëíë ì ììŒë©°, ìŽ ëžë¡ì ì¬ë êŽíž ììì ì€ì ë°ê¿ëë€. ìŽë¬í ëžë¡ë€, ì륌 ë€ìŽ ëŽë¶ì€ìì¹ë¬ž ê°ì ëžë¡ë€ì ìŒë°ì ìŒë¡ ì§ìë³ìì ë²ì륌 ì ííêž° ìíŽ ëì ë©ëë€.
ìì:
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();
}
{
int x = foo();
frob(x);
}
}
};
ìŽê±°í íŽëì€ë€ì ëí ëªê°ì§ ììžì¡°íë€ì ì¹ì 4.8.1, ìŽê±°í íŽëì€ì ëì ììµëë€.
ë¹ ëžë¡ìŽë block-like 구조ë K & R ì€íìŒ(ì¹ì
4.1.2ì ì€ëª
ëë¯)ì ì ì©í ì ììµëë€. ìëë©Ž, ë€ì€ ë¶ë¡ 묞ì¥(ì¬ë¬ ëžë¡ì ì§ì í¬íšíë ëžë¡: if/else
ë try/catch/finally
)ì ìŒë¶ê° ìë í êŽíž({})ì¬ìŽì 묞ìë ì€ë°ê¿ ììŽ ë«ì ì ììµëë€.
ìì:
// íì© ë ì ììµëë€.
void doNothing() {}
// ëí íì© ë ì ììµëë€.
void doNothingElse() {
}
// íì©ëì§ ììµëë€.: ë©í°ëžë¡ 구묞ììë ê°ê²°í ë¹ ëžë¡ì ì¬ì©í ì ììµëë€.
try {
doSomething();
} catch (Exception e) {}
ìë¡ìŽ ëžë¡ìŽë block-like êµ¬ì¡°ê° ìŽëŠŽ ë ë§ë€, ë€ì¬ì°êž°ê° ë ì¹žì© ìŠê°í©ëë€. ëžë¡ìŽ ëë ë, ë€ì¬ì°êž°ë ìŽì ë€ì¬ì°êž° ë ë²šë¡ ëìê°ëë€. ë€ì¬ì°êž° ë 벚ì ëžë¡ ì 첎ì ìœëì 죌ì 몚ëì ì ì©ë©ëë€. (ë¹ìŽìì§ ìì ëžë¡: K & R ì€íìŒ, ì¹ì 4.1.2 륌 ì°žì¡°íìžì.)
ê° ë¬žì¥ ë€ìë ì€ë°ê¿ìŽ ë°ëŒìµëë€.
ìë°ìœëë 100ìë¡ ìŽì ì íë©ëë€. íëì "묞ì"ë 몚ë ì ëìœë í¬ìžížë¥Œ ë»í©ëë€. ìë ìžêží ê²ì ì ìžíê³ ìŽ ì íì ìŽê³Œí 몚ë ëŒìžì ë°ëì ì¹ì 4.5, ì€ ë°ê¿ì ëí ì€ëª ëë¡ ì€ ë°ê¿ ëìŽìŒ í©ëë€.
ê° ì ëìœë í¬ìžížë€ì ì¶ë ¥ëë ëë¹ê° ëê±°ë ì¢ìë íëì 묞ìë¡ ê³ì°ë©ëë€. ì륌 ë€ìŽ, ì 첎 ëë¹ ë¬žì륌 ì¬ì©íë ê²œì° ìŽ ê·ì¹ìŽ ê°ì ëë ìì¹ë³Žë€ 뚌ì ì€ë°ê¿ì ì íí ì ììµëë€.
ììž:
- ìŽì íì ë°ë¥Œ ì ìë ëŒìžë€ì ê·ì¹ ì ì©ìŽ ë¶ê°ë¥ í©ëë€. (ì륌 ë€ìŽ, Javadoc ì ꞎ URL ìŽë ꞎ JSNI ë©ìë ì°žì¡°)
íší€ì§
ì ìžê³Œìí¬íž
묞ì¥. (ì¹ì 3.2 íší€ì§ ì ìžê³Œ ì¹ì 3.3 ìí¬ížë¬žì ì°žì¡°íìžì.)- ì žì ë³µë¶ëë 죌ìì ëª ë ¹ ëŒìž.
- ëë¬Œê² ì구ëë ê²œì° ì죌 ꞎ ìë³ìë ìŽì íì ìŽê³Œí ì ìê² íì©ë©ëë€. ìŽ ë, ì íší ì€ ë°ê¿ì 구êž-ìë°-íììŒë¡ ìì±ë©ëë€.
ì©ìŽ ì°žê³ : í ì€ì 묞ì ììŽ ì ì í ì ìë ìœëê° íëì ì€ìì ì¬ë¬ì€ë¡ ëë ë, ìŽ ìì ì ì€ ë°ê¿ìŽëŒê³ í©ëë€.
몚ë ìí©ìì ì€ë°ê¿ì ì ííê² ëíëŽë í¬êŽì ìŽê³ ê²°ì ì ìž ê³µìì ììµëë€. ë§€ì° ì죌 ê°ì ìœë ì¡°ê°ì ì€ë°ê¿ íë ëªê°ì§ ë°©ë²ìŽ ììµëë€.
ì°žê³ : ì€ ë°ê¿ì ëíì ìž ìŽì ê° ìŽ ì íì ìŽê³Œíì§ ìêž° ìíšìŽêž° ë묞ì, ì€ì ë¡ ìŽ ì íì ì€ìíë ìœë ëí ìì±ìì ì¬ëì ë°ëŒ ì€ ë°ê¿ìŽ ê°ë¥í©ëë€.
í: ë©ìë ë¶ëŠ¬ë ì§ìë³ìê° ì€ ë°ê¿ ììŽ ìŽ ë¬žì 륌 íŽê²° í ì ììµëë€.
ì€ë°ê¿ì 죌ì ì§ì¹šì ë€ì곌 ê°ìµëë€: ë ëì 구묞 ë 벚ìì ë°ê¿ëë€. ëí:
- í ì€ìŽ ë¹ í ë¹ ì°ì°ììì ë°ë ë, êž°íž ììì ë°ëëë€. (C++ ìŽë Javascript ì ê°ì ë€ë¥ž ìžìŽì Google ì€íìŒìì ì ì©ëë ê²ê³Œ ë€ë¥Žëš ê²ì ì늜ëë€.)
- ëí ìŽê²ì ë€ì "operator-like" êž°ížë€ìë ì ì©ë©ëë€.
- ì êµ¬ë¶ êž°íž(.)
- ë©ìë ì°žì¡°ì ë ìœë¡ (::)
- íì ë°ìŽëì ì°íŒìŒë(<T extends Foo & Bar>)
- catch ëžë¡ì íìŽí(catch (FooException | BarException e))
- ëí ìŽê²ì ë€ì "operator-like" êž°ížë€ìë ì ì©ë©ëë€.
- í ë¹ ì°ì°ììì ì€ìŽ ë°ë ë, ì€ë°ê¿ì ìŒë°ì ìŒë¡ êž°íž ë€ì ì€ì§ë§, ìŽë쪜ìŽë íì©ë©ëë€.
- ìŽê²ì í¥ìë
for
("foreach")묞ì "assignment-operator-like"í ìœë¡ ìë ì ì©ë©ëë€.
- ìŽê²ì í¥ìë
- ë©ìëë ìì±ì ìŽëŠì ê·ž ë€ì ì€ë ì¬ë êŽížì ë¶ìŽììµëë€.
- ìŒí(
,
)ë ìì ì€ë í í°ì ê³ì ë¶ìŽììµëë€. - ëë€ìì 볞묞ì êŽížê° ìë ëšìŒ ííììŒë¡ 구ì±ë 겜ì°ë¥Œ ì ìžíê³ , íìŽíì ìžì í ì€ì ì ë ë°ëì§ ììµëë€. ìì:
MyLambda<String, Long, Object> lambda =
(String label, Long value, Object obj) -> {
...
};
Predicate<String> predicate = str ->
longExpressionInvolving(str);
ì°žê³ : ì€ ë°ê¿ì ê°ì¥ 죌ë 목ì ì ê¹ëí ìœë륌 ìì±íêž° ìíš ì ëë€, ëŒìžì ìµëí ì ê² ë€ìŽê° ìœëë íì ììê° ìëëë€.
ì€ ë°ê¿ ì, 첫 ì€ ë€ìì ê° ëŒìžì (ê° ì°ì ì€) ìµì +4 공백 ìŽì ë€ì¬ìëë€.
ì°ìì€ìŽ ì¬ë¬ê°ìž ê²œì° ìíë ë§íŒ +4공백 ìŽììŒë¡ ë³ê²œ í ì ììµëë€. ìŒë°ì ìŒë¡ ëê°ì ì°ì ì€ì 구묞 ì ë³ë ¬ ììë¡ ììíë 겜ì°ìë§ ê°ì ë ë²šë¡ ë€ì¬ìëë€.
ìí ì ë ¬ì êŽí ì¹ì 4.6.3ì í¹ì í í°ì ì§ì ëŒìžê³Œ ì ë ¬íêž°ìíŽ ì¬ë¬ê°ì 공백ì ì¬ì©íë ê¶ì¥ëì§ ìë ë°©ë²ì ë€ë£¹ëë€.
íëì ë¹ ì€ì íì ë€ì곌 ê°ì ë ëíë©ëë€.:
- ì°ìì ìž ë©€ë²ë íŽëì€ ìŽêž°í ì¬ìŽ: íëë ìì±ì, ë©ìë, ì€ì²© íŽëì€, ì ì ìŽêž°í ê°ì²Ž ìŽêž°í
- ììž: ëê°ì ì°ìë íë ì¬ìŽ(ì¬ìŽì ìë¬Žë° ë€ë¥ž ìœëê° ìì ë) ë¹ ì€ì ì íì ì ëë€. ìŽë¬í ë¹ ì€ì ë ŒëŠ¬ì 귞룹ì ë§ë€ìŽìŒ í ë ì¬ì©ë©ëë€.
- ììž: ìŽê±°ì ìì ì¬ìŽ ë¹ ì€ì ì¹ì 4.8.1ìì ë€ë£¹ëë€.
- ìŽ ë¬žìì ë€ë¥ž ì¹ì ìŽ ì구íë ë°ì ê°ìµëë€ (ìì: ì¹ì 3 ìì€ íìŒ êµ¬ì¡°, ì¹ì 3.3 ìí¬íž 구묞).
ëí ë¹ ì€ì ê°ë ì±ì ëìŽë 몚ë ìì¹ìì ëíë ì ììµëë€, ì륌 ë€ìŽ ë ŒëŠ¬ì íìì¹ì ìŒë¡ 구ì±ëë ëª ë ¹ë¬ž ì¬ìŽ. 첫ë²ì§ž ë©€ë²ë ìŽëì ëŒìŽì ìì ë¹ ì€ìŽë, ë§ì§ë§ ë©€ë²ë ìŽëì ëŒìŽì ë€ì ë¹ ì€ì ê¶ì¥ëì§ ìì§ë§ êžì§ëì§ë ììµëë€.
ì¬ë¬ê°ì ì°ìì ìž ë¹ ì€ì íì©ë©ëë€ë§, ì ë íì(ëë ê¶ì¥)ë ìëëë€.
늬í°ëŽê³Œ 죌ì, Javadoc ì ì ìžíê³ ìžìŽë ë€ë¥ž ì€íìŒ ê·ì¹ìì ì구íë ìì¹ ìžì, íëì ASCII 공백ì ë€ìììë§ ëíë©ëë€.
if
,for
,catch
ì ê°ì ììœìŽ ë€ì ëì€ë ì¬ë êŽíž((
) ìelse
ëcatch
곌 ê°ì ììœìŽ ìì ëì€ë ë«ë ì€êŽíž(}
) ì- ìë ë ììžë¥Œ ì ìží, 몚ë ì¬ë ì€êŽíž(
}
) ì@SomeAnnotation({a, b})
(ê³µë°±ìŽ ì¬ì©ëì§ ììµëë€.)String[][] x = {{"foo"}};
(ìë 9ë² í목ì ìíŽ{{
ì¬ìŽì ê³µë°±ìŽ íìíì§ ììµëë€.)
- ìŽí ëë ìŒí ì°ì°ì êž°íž ì, ë€. ìŽë "operator-like"êž°ížë€ìë ì ì©ë©ëë€.
- ìžì í íì
ë°ìŽë©ì ì°íŒìë:
<T extends Foo & Bar>
- catch ëžë¡ìì ì¬ë¬ ììžë¥Œ ížë€ë§ í ë íìŽí:
catch(FooException | BarException e)
- í¥ìë
for
("foreach")묞ì ìœë¡ (:
) - ëë€ ííì íìŽí:
(String str) -> str.length()
íì§ë§ ìëììë ì ì© ë ì ììµëë€. Object::toString
곌 ê°ì ë©ìë ì°žì¡°ì ìœë¡ (::
) ëê°object.toString()
곌 ê°ì ì êµ¬ë¶ êž°íž
- ìžì í íì
ë°ìŽë©ì ì°íŒìë:
,:;
ë€ë ìºì€í í ë ë«ë êŽíž()
) ë€- 죌ìì ììíë ëëž ì¬ëì(
//
)ì 몚ë 컚í ìž ì¬ìŽ, 공백 ì¬ë¬ê°ê° íì©ë©ëë€. - ëëž ì¬ëìì 죌ì ëŽì© ì¬ìŽ. 공백 ì¬ë¬ê°ê° íì©ë©ëë€.
- ì ìž ì ë³ì íì
곌 ìŽëŠ ì¬ìŽ:
List<String> list
- ë°°ìŽ ì ìž ì ì€êŽíž ëŽë¶ìì ì íì ìŒë¡ íì©
new int[] {5, 6}
ìnew int[] { 5, 6 }
ë ë€ ê°ë¥í©ëë€.
- íì
ì ëí
ìŽì
곌 ëêŽíž
[]
ëë...
ìŽ ê·ì¹ì ì€ì ìììŽë ëìì ì¶ê°ì ìž ê³µë°±ì ì구íê±°ë êžì§íëê²ì ìëëë€.; ëŽë¶ ê³µê°ë§ì ë€ë£¹ëë€.
ì©ìŽ ì°žê³ : ê°ë¡ ì ë ¬ì í¹ì í í°ìŽ ìŽì ì€ì ë€ë¥ž í í° ë°ë¡ ìëì ëíëëë¡ ìœëì ì¬ë¬ê°ì 공백ì ì¶ê°íë ë°©ë²ì ëë€.
ìŽ ë°©ë²ì íì©ë©ëë€. íì§ë§ Google ì€íìŒìì ì구ëëê²ì ìëëë€. ìŽë¯ž ì¬ì©ë ìì¹ìì ì ë ¬ì ì ì§í íìê° ììµëë€.
ë€ìì ì ë ¬ ììŽ, ì ë ¬íì¬ ì¬ì©íë ììë€ ì ëë€.:
private int x; // êŽì°®ìµëë€.
private Color color; // ë§ì°¬ê°ì§ë¡ êŽì°®ìµëë€.
private int x; // íì©ë©ëë€, í¥í ížì§í©ëë€.
private Color color; // ì ë ¬íì§ ìì íš ë ì ììµëë€.
í: ì ë ¬ì ê°ë ì±ì ëìŒ ì ìì§ë§, í¥í ì ì§ë³Žìì 묞ì 륌 ìŒìŒí¬ ì ììµëë€. ëì€ì ëš í ì€ë§ ìì íëê²ì ê³ ë €íŽë³Žììì€. ìŽ ìì ìŒë¡ êŽì°®ì í¬ë§·ì ë§ì¹ ì ììŒë©°, íì©ë©ëë€. ë ì죌 ìœë(ìë§ë ë¹ì )ìê² ê·Œì² ëŒìž 공백ì ë§ì¶ëŒë ë©ìžì§ë¥Œ íìíë©°, ìŒë šì ì¬êµ¬ì±ì ë¶ë¬ ìŒìŒí¬ ì ììµëë€. ê·ž íì€ì ìì ì "íë° ë°ê²œ"ì ê°ì§ëë€. ìŽë ìµì ì 묎ì믞í ìì ì ìŽëí ì ìê³ , ë²ì êž°ë¡ ì 볎륌 ìììí€ê³ , ê²í ìì ìë륌 ì íìí€ê³ ëšžì§ì¶©ëì ë°ì ìíµëë€.
ì íì ìŒë¡ êŽížë¥Œ 귞룹í íëê²ì ìì±ìì ê²í ìê° ìœë륌 ì못 ìŽíŽíê±°ë ìœêž° ìœê² ë§ë€ ê°ë¥ì±ìŽ ìë€ê³ ëìíë 겜ì°ìë§ ìëµë©ëë€. 몚ë ì¬ëìŽ ì 첎 ìë° ì°ì°ì ì°ì ìì í ìŽëžì êž°ìµíë€ê³ ê°ì íëê²ì ë¹í©ëŠ¬ì ì ëë€.
ìŽê±°í ìì ë€ì ì€ë ê°ê°ì ìŒí ë€ì ì€ ë°ê¿ì ì íì¬íì ëë€. ì¶ê°ì ìž ë¹ ì€(ë³Žíµ í ì€)ëí íì©ë©ëë€. ìëë íê°ì§ ìì ì ëë€.:
private enum Answer {
YES {
@Override public String toString() {
return "yes ";
}
},
NO,
MAYBE
}
ë©ìëì ì€ëª ìŽ ìë ìŽê±°í íŽëì€ë ë°°ìŽ ìŽêž°íì²ëŒ í¬ë§·ë ì ììµëë€. (ë°°ìŽ ìŽêž°í륌 ëíëŽë ì¹ì 4.8.3.1ì ì°žê³ íìžì.)
private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }
ìŽê±°í íŽëì€ë íŽëì€ìŽë¯ë¡, íŽëì€ íìì ëí ë€ë¥ž 몚ë ê·ì¹ë€ìŽ ì ì©ë©ëë€.
몚ë ë³ì ì ìž(íëë ì§ìë³ì)ë íëì© ì ìží©ëë€.: int a, b;
ì ê°ì ì¬ì©ì íì©íì§ ììµëë€.
ììž: for
룚í í€ëììë íì©ë©ëë€.
ì§ìë³ìë í¬íš ëžë¡ìŽë block-like 구조ì ìì ë¶ë¶ìì ìµêŽì ìŒë¡ ì ìžëì§ ììµëë€. ëì ì§ìë³ìë ë²ì륌 ìµìííêž° ìíŽ ì²ì ì¬ì©ëë ì§ì (í©ë¹í)ì ì ìží©ëë€. ì§ìë³ìë ì ìžê³Œ ëìì ìŽêž°íëê±°ë ì ìž ì§í ë°ë¡ ìŽêž°íë©ëë€.
몚ë ë°°ìŽ ìŽêž°íë ì íì ìŒë¡ "block-like 구조" ì²ëŒ í¬ë§€í ë ì ììµëë€. ì륌 ë€ìŽ, ìë 몚ë ìí©ì íì©í©ëë€.(ìì í 목ë¡ì ìëëë€.)
new int[] { new int[] {
0, 1, 2, 3 0,
} 1,
2,
new int[] { 3,
0, 1, }
2, 3
} new int[]
{0, 1, 2, 3}
ëêŽížë ìë£íì ìŒë¶ë¥Œ 구ì±í©ëë€. ë³ì륌 구ì±íì§ ììµëë€.: String args[]
ê° ìëëŒ, String[] args
ì©ìŽ ì°žê³ : ì€ìì¹ ëžë¡ì ì€êŽíž ëŽë¶ìë íë ìŽìì 구묞 ê·žë£¹ìŽ ììµëë€. ê° êµ¬ë¬žê·žë£¹ì íë ìŽìì ëª
ë ¹ë¬ž(ëë ë§ì§ë§ ëª
ë ¹ë¬ž 귞룹ì 겜ì°, 0ê° ìŽìì ëª
ë ¹ë¬ž)ì í¬íšíë íë ìŽìì ì€ìì¹ ëŒë²šë€(case FPP:
ì default:
몚ë)ë¡ êµ¬ì±ë©ëë€.
ë€ë¥ž ëžë¡ë€ê³Œ ë§ì°¬ê°ì§ë¡, ì€ìì¹ ëžë¡ ëŽì©ì +2ë¡ ë€ì¬ì°êž° ë©ëë€.
ì€ìì¹ ëŒë²š ë€ìë, ì€ ë°ê¿ìŽ ìê³ , ë€ì¬ì°êž° ë 벚ì ëžë¡ìŽ ìŽëŠ°ê² ì²ëŒ +2ê° ì¶ê°ë©ëë€. ì€ìì¹ë¬žìŽ ëëë©Ž ëžë¡ìŽ ë«íê² ì²ëŒ ìŽì ë€ì¬ì°êž° ë ë²šë¡ ëìê°ëë€.
ì€ìì¹ ëžë¡ ëŽë¶ìì, ê° êµ¬ë¬ž 귞룹ì ê°ìêž° ì¢
ë£ëê±°ë(break
, continue
, return
ëë ììžì ê°ìŽ), ë€ì 구묞ìŒë¡ ê³ìë ì ììì ëíëŽë 죌ììŒë¡ íìë©ëë€. fall-through 륌 ëíëŽë 죌ìì ë¬ ì ììµëë€. (ìŒë°ì ìŒë¡ //fall-through
) ìŽ í¹ìí 죌ìì ì€ìì¹ ëžë¡ì ë§ì§ë§ ëª
ë ¹ë¬ž 귞룹ìë ì구ëì§ ììµëë€. ìì:
switch (input) {
case 1:
case 2:
prepareOneOrTwo();
// fall through
case 3:
handleOneTwoOrThree();
break;
default:
handleLargeNumber(input);
}
case 1:
ë€ì 죌ììŽ íìíì§ ìê³ , ëª
ë ¹ë¬ž 귞룹 ë€ììë§ ì£ŒììŽ íìí©ëë€.
ê° ì€ìì¹ë¬žì default
êµ¬ë¬žìŽ ìë¬Žë° ìœë륌 í¬íšíì§ ìëëŒë, í¬íší©ëë€.
ììž: ìŽê±°íì ëí ì€ìì¹ë¬žì 몚ë ëª
ìì ìŒìŽì€ë¥Œ ì²ëŠ¬í ê²œì° default
구묞 귞룹ì ìëµí ì ììµëë€. ìŽë¥Œ íµíŽ IDE ë êž°í ë¶ìë구ë ê²œê³ ë¥Œ íìí ì ììµëë€.
íì
ì ëí
ìŽì
ì ìë£í ë°ë¡ ìì ë¶ì ì ììµëë€. Taget(ElementType.TYPE_USE)
ê°ì ë©í-ì ëí
ìŽì
ìŽëŒë©Ž íì
ì ëí
ìŽì
ì
ëë€. ìì:
final @Nullable String name;
public @Nullable Person getPersonByName(String name);
íŽëì€ì ì ì©ëë ì ëí ìŽì ì 묞ì ëžë¡ ë°ë¡ ë€ì ëíëë©°, ê°ê°ì ì¬ì©ëë ìì¹ì(íì€ì íëì©) ì ë ¬ë©ëë€. ìŽ ì€ë°ê¿ì ì€ë°ê¿ì 구ì±íì§ ììŒë¯ë¡(ì€ ë°ê¿ ì¹ì 4.5), ë€ì¬ì°êž° ë 벚ì ìŠê°íì§ ììµëë€. ìì:
@Deprecated
@CheckReturnValue
public final class Frozzler { ... }
ì§ì ì¹ì 곌 íµìŒíê² ì ì©ë©ëë€. ìì:
@Deprecated
@Override
public String getNameIfPresent() { ... }
ììž: ëš íëì 맀ê°ë³ìê° ìë ì ëí ìŽì ì ìê·žëì²ì 첫ë²ì§ž ëŒìžì ê°ìŽ íìë ì ììµëë€. ìì:
@Override public int hashCode() { ... }
íëì ë¶ì ì ëí ìŽì ëí 묞ì ëžë¡ ë€ì ë¶ì ì ììµëë€. ê·žë¬ë ìŽ ê²œì° ì¬ë¬ ì ëí ìŽì (맀ê°ë³ìí ëìì ê°ë¥ì±ìŽ ìë)ì ê°ì ëŒìžì ì ë ¬ë©ëë€.; ìì:
@Partial @Mock DataLoader loader;
ìŽ ì¹ì ììë 구í 죌ìì ë€ë£¹ëë€. Javadoc ì ì¹ì 7ìì ë³ëë¡ ë€ë£¹ëë€.
맀 ì€ ë°ê¿ì ììì 공백 ë€ì 구í ì€ëª ìŽ ëíë ì ììµëë€. ìŽë¬í 죌ìì ì€ì 공백ìŒë¡ ë§ë€ì§ ììµëë€.
ëžë¡ 죌ìì ì£Œë³ ìœëì ëìŒí ë ë²šë¡ ë€ì¬ì°êž° ë©ëë€. /* ... */
ì€íìŒìŽë // ...
ì€íìŒìŽ ë ì ììµëë€. ì¬ë¬ì€ 죌ì/* ... */
ì ê²œì° ë°ëì íì ì€ìŽ *
ì ë ¬ë ê²ìŒë¡ ììëŒìŒ í©ëë€.
/*
* êŽì°®ìµëë€. // êŽì°®ìµëë€. /* ìŽê²ë
* // * êŽì°®ìµëë€. */
*/
죌ìì ë³íë êž°í ë€ë¥ž 묞ìë¡ ê·žë €ì§ ë°ì€ì í¬íšëì§ ììµëë€.
í: ì¬ë¬ ì€ ì£Œìì ìì± í ë íìí ê²œì° ìœë ížì§êž°ê° íìí 겜ì°(paragraph-style) ì€ì ë€ì ì ë ¬íëë¡ íë€ë©Ž
/* ... */
ì€íìŒì ì¬ì©íìžì. ëë¶ë¶ì ížì§êž°ë// ...
ì€íìŒ ì£Œì ëžë¡ìì ì€ì ë°êŸžì§ ììµëë€.
íŽëì€ë ë©€ë² ì ê·Œì íìê° ìë€ë©Ž, Java Language Specification ì ì ìë ë°©ìì ë°ëŒ ìì±ë©ëë€.:
public protected private abstract default static final transient volatile synchronized native strictfp
long ííì ì ì 늬í°ëŽì ë묞ì L ì ì 믞ì¬ë¡ ë¶ì
ëë€. ì«ì 1곌 구ë³íêž° ìíšìŽë¯ë¡ ì ë ì묞ì륌 ì¬ì©íŽìë ìë©ëë€. ì륌 ë€ìŽ, 3000000000l ëì 3000000000L
ìë³ìë ìëì ì€ëª
í ëªëª 겜ì°ì ì€ì§ ASCII 묞ìì ì«ì, ë°ì€ë§ ì¬ì©í©ëë€. ê·žëì ì íší ìë³ì ìŽëŠì \w+
ì ê·ì ê·ì¹ì ë€ìŽë§ìµëë€.
Google ì€íìŒìì í¹ìì ëì¬ë ì 믞ì¬ë ì¬ì©ëì§ ììµëë€. ì륌 ë€ìŽ, ìŽë¬í ìŽëŠë€ì Google ì€íìŒìŽ ìëëë€.: name_
곌 mName
, s_name
, kName
.
íší€ì§ëª
ì ììŽ ì묞ìì ì«ìë§(ë°ì€ êžì§)ì ì¬ì©í©ëë€. ìŒë°ì ìŒë¡ ì°ìì ìž ëšìŽë€ë í꺌ë²ì ìì±ë©ëë€. ì륌 ë€ìŽ, com.example.deepãŽpace
ë com.example.deep_space
ê° ìë, com.example.deepspace
ë¡ ëª
ëª
ë©ëë€.
íŽëì€ëª ì UpperCamelCase ë¡ ìì±í©ëë€.
ìŒë°ì ìŒë¡ íŽëì€ëª
ì ëª
ì¬ ëë ëª
ì¬êµ¬ ì
ëë€. ì륌 ë€ìŽ, Character
ë ImmutableList
. ìží°íìŽì€ëª
ëí ëª
ì¬ë ëª
ì¬êµ¬ë¡ ííë©ëë€ë§(ì륌 ë€ìŽ, List
), ëëë¡ íì©ì¬ë íì©ì¬êµ¬ë¡ ííë ì ììµëë€.(ì륌 ë€ìŽ, Readable
)
ìŽë ží ìŽì ëª ì ëí í¹ë³íê±°ë ì ì 늜ë ê·ì¹ì ììµëë€.
í
ì€íž íŽëì€ëª
ì íì Test
ë¡ ëëìŒ í©ëë€. ì륌 ë€ìŽ, HashIntegrationTest
. ë§ìœ ëšìŒ íŽëì€ë¥Œ í¬íšíë€ë©Ž íŽë¹ íŽëì€ì ìŽëŠì Test
ê° ì¶ê°ë©ëë€. ì륌 ë€ìŽ HashImplTest
.
ë©ìëëª ì lowerCamelCase ë¡ ìì±í©ëë€.
ìŒë°ì ìŒë¡ ë©ìëëª
ì ëì¬ ëë ëì¬êµ¬ ì
ëë€. ì륌 ë€ìŽ, sendMessage
ë stop
.
JUnit í
ì€íž ë©ìëëª
ìì ë°ì€ìŽ íìëìŽ ìŽëŠì ë
ŒëŠ¬ì 구ì±ìì륌 êµ¬ë¶ í ì ìê³ , ê° êµ¬ì±ììë€ì lowerCamelCaseë¡ ìì±í©ëë€. ì륌 ë€ìŽ transferMoney_deductsFromSource
. ëš í
ì€íž ë©ìëëª
ì ìí íëì ì íí ë°©ë²ì ììµëë€.
ììëª
ì UPPER_SNAKE_CASE
ë¡ ìì±í©ëë€.: íëì ë°ì€ë¡ 구ë¶ëë ë묞ì. íì§ë§ ììë 묎ììŒê¹ì?
ììë ëŽì©ìŽ ìì í ë¶ë³íê³ ë©ìëìì ë¶ìì©ì ì°Ÿì ì ìë static final íëì
ëë€. ìë ììë Ʞ볞 ë° ë¬žììŽ, ë¶ë³ ê° íŽëì€, null
ë¡ ì€ì ë 몚ë ê²ë€ ì
ëë€. ê°ì²Žì ìíê° ë³í ì ìë ê²œì° ììëŒ í ì ììµëë€. ëšìí ì€ëžì ížì ë³ê²œì ë§ë ê²ìŒë¡ë 충ë¶íì§ ììµëë€. ìì:
// ìì
static final int NUMBER = 5;
static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
static final Map<String, Integer> AGES = ImmutableMap.of("Ed", 35, "Ann", 32);
static final Joiner COMMA_JOINER = Joiner.on(','); // Joinerë ë¶ë³ì
ëë€.
static final SomeMutableType[] EMPTY_ARRAY = {};
// ììê° ìë ê²ë€
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final Set<String> mutableCollection = new HashSet<String>();
static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
static final ImmutableMap<String, SomeMutableType> mutableValues =
ImmutableMap.of("Ed", mutableInstance, "Ann", mutableInstance2);
static final Logger logger = Logger.getLogger(MyClass.getName());
static final String[] nonEmptyArray = {"these", "can", "change"};
ìŒë°ì ìŒë¡ ìŽë¬í ìŽëŠë€ì ëª ì¬ ëë ëª ì¬êµ¬ ì ëë€.
ììê° ìë íë(static ë± êž°í)ëª ì lowerCamelCase ë¡ ìì±í©ëë€.
ìŒë°ì ìŒë¡ ìŽ ìŽëŠë€ì ëª
ì¬ ëë ëª
ì¬êµ¬ ì
ëë€. ì륌 ë€ìŽ, computedValues
ë index
.
맀ê°ë³ìëª ì lowerCamelCase ë¡ ìì±í©ëë€.
public ë©ìëìì íêžì 맀ê°ë³ìë êžì§ëìŽìŒ í©ëë€.
ì§ìë³ìëª ì lowerCamelCase ë¡ ìì±í©ëë€.
final ìŽê±°ë ë¶ë³ìŒ ëìë, ì§ìë³ìë ììë¡ ê°ì£Œëì§ ìê³ , ìì ì€íìŒì ì§ì íì§ ìììŒ í©ëë€.
ê°ê°ì íì ë³ìëª ì ë€ì ë ê°ì§ ì€íìŒ ì€ íëê° ì ì©ë©ëë€.:
- íëì ì묞 ë묞ì, ì íì ìŒë¡ íëì ì«ìê° ë°ëŒì¬ ì ììµëë€. (
E
ëT
,X
,T2
ì²ëŒ) - íŽëì€ì ì¬ì©ëë(íŽëì€ëª
, ì¹ì
5.2.2 ì°žì¡°) íìëª
ììž ì묞 ë묞ì
T
ê° ë¶ì ì ììµëë€. (ì륌 ë€ìŽ,RequestT
,FooBarT
)
ëëë¡ ëêžì ëšìŽë "IPv6", "IOS"ê°ì ìŒë°ì ìŽì§ ìì ííì êµ¬ì¡°ìŒ ë ì묞ì 칎ë©ìŒìŽì€ë¡ ë³ííë í©ëŠ¬ì ìž ë°©ë²ì ì¬ë¬ê°ì§ê° ììµëë€. ììž¡ ê°ë¥ì±ì ëìŽêž° ìíŽ, Google ì€íìŒì ë€ì곌 ê°ì (ê±°ì)ê²°ì ì ìž íí륌 ì§ì í©ëë€.
ì°ë¬žì²Žë¡ ììí©ëë€.:
- íë ìŽìŠë¥Œ ìŒë° ASCII ë¡ ë°êŸžê³ ìŽíŒì€ížë¡íŒë¥Œ ì ê±°íŽìŒí©ëë€. ì륌 ë€ìŽ:
"MÃŒller's algorithm"ì "Muellers algorithm"ìŒë¡ ë°ë ì ììµëë€. - 결곌륌 공백곌 ëëšžì§ êµ¬ëì (ë³Žíµ íìŽí)ìŒë¡ 구ë¶ëë ëšìŽë³ë¡ ëëëë€.
- ê¶ì¥: ìŒë°ì ìŒë¡ ì¬ì©ëë 칎ë©ìŒìŽì€ ííì ëšìŽëŒë©Ž ìŽë¥Œ êµ¬ì± ì±ë¶(ì륌 ë€ìŽ, "AdWords"ë "ad words"ê° ë©ëë€.)ìŒë¡ ëëëë€. "IOS"ê°ì ëšìŽë ì€ì ë¡ ì¹Žë©ìŒìŽì€ê° ìëì ì늜ëë€.; ìŽë 몚ë ê·ì¹ì ë°ë¥Žì§ ììŒë¯ë¡, ê¶ì¥ì¬íìŽ ì ì©ëì§ ììµëë€.
- ìŽì ì ë¶(ìœìŽë¥Œ í¬íšíŽ) ì묞ìë¡ ë°êŸžê³ , ê° ëšìŽì 첫 묞ìë§ ë묞ìë¡ ë°ê¿ëë€.:
- ... ê° ëšìŽë¥Œ UpperCamelCase ë¡ ë°êŸžê±°ë,
- ... ê° ëšìŽë¥Œ lowerCamelCase ë¡ ë°ê¿ëë€.
- ë§ì§ë§ìŒë¡, 몚ë ëšìŽë¥Œ ëšìŒ ìë³ìë¡ ê²°í©í©ëë€.
ìë ëšìŽì ëì묞ìë ê±°ì ìì í 묎ìë©ëë€. ì륌 ë€ìŽ:
Prose form | Correct | Incorrect |
---|---|---|
"XML HTTP request" | XmlHttpRequest |
XMLHTTPRequest |
"new customer ID" | newCustomerId |
newCustomerID |
"inner stopwatch" | innerStopwatch |
innerStopWatch |
"supports IPv6 on iOS?" | supportsIpv6OnIos |
supportsIPv6OnIOS |
"YouTube importer" | YouTubeImporter YoutubeImporter * |
- íì©ëì§ë§ ê¶ì¥íì§ ììµëë€.
ì°žê³ : ììŽìì ìŒë¶ ëšìŽë€ì íìŽíìŒë¡ 몚ížíê² ì°ê²°ë©ëë€.: ì륌 ë€ìŽ "nonempty"ì "non-empty"ë 몚ë ì³êž°ë묞ì, ìŒë¶
checkNonempty
ëcheckNonEmpty
ì ê°ì ë©ìëëª ì ì³ìµëë€.
@Override ê° íì© ë ë ë§ë€ ìŽë ží ìŽì ìŒë¡ íêž°í©ëë€. ìŽë ìì íŽëì€ ë©ìë ì¬ì ìì ìží°íŒìŽì€ ë©ìë 구í, ìì ìží°íìŽì€ ë©ìë륌 ì¬ ì§ì íë ê²ì í¬íší©ëë€.
ììž: @Override
ë ë¶ëªš ë©ìëê° @Deprecated
ìž ê²œì°ìëµ ë ì ììµëë€.
ìë ìì±ë 겜ì°ë¥Œ ì ìžíê³ , ììžë¥Œ ì¡ê³ ì묎ê²ë íì§ ìëê²ì ë§€ì° ëë
ëë€. (ìŒë°ì ìž ìëµì ë¡ê·žë¥Œ êž°ë¡íê±°ë, "ë¶ê°ë¥"íë€ê³ ê³ ë €ë ê²œì° AssertionError
ë¡ ë€ì ëì§ëë€.)
catch ëžë¡ìì ì묎ê²ë íì§ ìëê²ìŽ ì ë§ë¡ ì ì í ë, ì ë¹í ëë ìŽì 륌 죌ììŒë¡ ì€ëª íŽìŒ í©ëë€.
try {
int i = Integer.parseInt(response);
return handleNumericResponse(i);
} catch (NumberFormatException ok) {
// ì«ìê° ìëëë€.; êŽì°®ìŒë ê·žë¥ ì§íí©ëë€.
}
return handleTextResponse(response);
ììž: í
ì€ížìì, ì¡í ììžì ìŽëŠìŽ expected
ê±°ë expected
ë¡ ììí ê²œì° ì£Œì ììŽ ë¬Žìë ì ììµëë€. ë€ìì í
ì€ížê° ììžë¥Œ ëì§ê²ìŽëŒëê²ì 볎ì¥íë ë§€ì° ìŒë°ì ìž êŽì©êµ¬ìŽë¯ë¡ 죌ììŽ íì ììµëë€.
try {
emptyStack.pop();
fail();
} catch (NoSuchElementException expected) {
}
ì ì íŽëì€ ë©€ë²ì ëí ì°žì¡°ê° ë°ëì ì ê·íëìŽìŒ íë 겜ì°, íŽë¹ íŽëì€ëª ìŒë¡ ì ê·í íŽìŒ í©ëë€.
Foo aFoo = ...;
Foo.aStaticMethod(); // ì¢ì
aFoo.aStaticMethod(); // ëìš
somethingThatYieldsAFoo().aStaticMethod(); // ë§€ì° ëìš
Object.finalize
륌 ì¬ì ìíë ê²ì ê·¹í ëë
ëë€.
í: íì§ë§ìžì. ì ë§ë¡ íŽìŒíë 겜ì°, ìŽíí°ëž ìë°ì í목 , "ììŽí 8. finalizerì cleaner ì¬ì©ì íŒíëŒ."륌 ë§€ì° ì£Œìê¹ê² ìœê³ ìŽíŽí ë€, íì§ë§ìžì.
Javadoc ëžë¡ì ìŒë°ì ìž êµ¬ì¡°ë ë€ì ììì ê°ìµëë€.:
/**
* ì¬ë¬ì€ì Javadoc í
ì€ížê° ì¬êž° ìì±ë©ëë€,
* ìŒë°ì ìŒë¡ ëíë©ëë€ ...
*/
public int method(String p1) { ... }
... ëë ìë í ì€ ììì ê°ìµëë€.:
/** í¹í 짧ì Javadoc ì
ëë€. */
Ʞ볞 íìì ìžì ë íì©ë©ëë€. í ì€ íìì Javadoc ëžë¡(죌ì곌 ë§ì»€ë¥Œ í¬íšíë) ì ì²Žê° í ì€ìŽ ë ì ìì ê²œì° ë첎ë ì ììµëë€. ìŽë @return
곌 ê°ì ëžë¡ íê·žê° ìë 겜ì°ìë§ ì ì©ëšì ì늜ëë€.
íëì ë¹ ì€-ìŠ ì ë ¬ë ì í ë³í(*
)ë§ìŽ í¬íšë ì€-ì ë¬žëš ì¬ìŽì ëíëê³ , ëžë¡ íê·ž ê·žë£¹ìŽ ìë ê²œì° ìì ëíë©ëë€. 첫ë²ì§žë¥Œ ì ìží ê° ë¬žëšì 첫ë²ì§ž ëšìŽ ìì 공백 ììŽ <p>
륌 ê°ì§ëë€.
ì¬ì©ëë íì€ "ëžë¡ íê·ž"ë @param
, @return
, @throws
, @deprecated
ë¡ íìëë©°, ë¹ ì€ëª
ìŒë¡ íìëì§ ììµëë€.
ê° Javadoc ëžë¡ì ê°ëµí ììœ ë¶ë¶ìŒë¡ ììí©ëë€. ìŽ ë¶ë¶ì êµì¥í ì€ìí©ëë€.: íŽëì€ì ë©ìëì ìžë±ì€ì²ëŒ í¹ì 컚í ì€ížì ëíëë í ì€ížì ì ìŒí íížì ëë€.
ìŽë ìì í 묞ì¥ìŽ ìë, ëª
ì¬êµ¬ë ëì¬êµ¬ ë¶ë¶ì
ëë€. ìŽë Save the record.
ê°ì ìì í ëª
ë ¹ë¬žì íì±íì§ë ìê³ , A {@code Foo} is a...
ë This method returns...
ë¡ ììíì§ ììµëë€. ê·žë¬ë, ë묞ìë¡ ì°ì¬ì ž ìê³ ë§ì¹ ìì í 묞ì¥ìž ê² ì²ëŒ 구ëì ìŽ ì°í ììµëë€.
í: íí ì€ìë ê°ëší Javadoc ì
/** @return the customer ID */
ì ê°ììììŒë¡ ìì±íëê² ì ëë€. ìŽë íë žê³ , ë°ëì/** Return the customer ID. */
ë¡ ë°ëìŽìŒí©ëë€.
ìë ëªê°ì§ ììžì íšê» Javadoc ì ìµìí, 몚ë public
íŽëì€ì, public
ëë protected
ë©€ë²ì ëíë©ëë€.
ì구ëì§ ìë Javadoc, ì¹ì 7.3.4ì ì€ëª ë ê² ì²ëŒ ì¶ê°ì ìž Javadoc 컚í ìž ëí ëíë ì ììµëë€.
Javadoc ì getFoo()
ê°ì ì ë§ ì€ëª
í ë§íê²ìŽ "foo 륌 ë°ííë€."ë ê² ìžì ì묎ê²ë ìë 겜ì°ì ê°ìŽ "ëšìíê³ , ëª
ë°±í" ë©€ë²ë€ì ëí ì íì¬íì
ëë€.
Javadoc ì super íì ë©ìë륌 ì¬ì ìíë ë©ìëì íì ì¡Žì¬íëê²ì ìëëë€.
ë€ë¥ž íŽëì€ì ë©€ë²ë íìíê±°ë ìíë ëë¡ Javadoc ì ê°ì§ëë€.
구í 죌ììŽ íŽëì€ë ë©€ë²ì ì 첎ì ìž ëª©ì ìŽë ëìì ì ìíë ë° ì¬ì©ë ëë ìžì ë, íŽë¹ 죌ìì Javadoc ìŒë¡(/**
ëì ) ìì±ë©ëë€.
íìê° ìë Javadoc ì ë¬Œë¡ ê¶ì¥ëì§ë§, ì¹ì 7.2곌, 7.1.1, 7.1.2, 7.1.3 ì ì격íê² ì€ìíŽìŒ íë ê²ì ìëëë€.