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 ์ ์๊ฒฉํ๊ฒ ์ค์ํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.