๋ณธ๋ฌธ์œผ๋กœ ์ด๋™

Javadoc

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „.

Javadoc(์ž๋ฐ”๋…) ๋˜๋Š” JavaDoc, javadoc์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์œ„ํ•œ API ๋ฌธ์„œ ์ƒ์„ฑ๊ธฐ์ด๋‹ค. Javadoc์€ ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ์˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ HTML ํ˜•์‹ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•œ ๋‹ค๋ฅธ ํ˜•์‹์˜ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.[1] Javadoc์€ ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ์—์„œ ๊ฐœ๋ฐœํ–ˆ์œผ๋ฉฐ ํ˜„์žฌ๋Š” ์˜ค๋ผํด์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ๋‹ค.

๊ฒฐ๊ณผ ๋ฌธ์„œ์˜ ๋‚ด์šฉ๊ณผ ํ˜•์‹์€ ์†Œ์Šค ์ฝ”๋“œ ์ฃผ์„ ๋‚ด์˜ ํŠน๋ณ„ํ•œ ๋งˆํฌ์—… ์–ธ์–ด๋ฅผ ํ†ตํ•ด ์ œ์–ด๋œ๋‹ค. ์ด ๋งˆํฌ์—…์€ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ๋ฐ ์žˆ์–ด ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ด์ž ์–ด๋””์—๋‚˜ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—,[2] ๋งŽ์€ ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์—์„œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณผ ๋•Œ(์ข…์ข… ๊ด€๋ จ ์‹ฌ๋ณผ ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ) Javadoc ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํ‘œ์‹œํ•œ๋‹ค. IntelliJ IDEA, ๋„ท๋นˆ์ฆˆ, Eclipse์™€ ๊ฐ™์€ ์ผ๋ถ€ IDE๋Š” Javadoc ํ…œํ”Œ๋ฆฟ ์ฃผ์„ ๋ธ”๋ก ์ƒ์„ฑ์„ ์ง€์›ํ•œ๋‹ค.[3] Javadoc ๋งˆํฌ์—…์˜ @tag ๊ตฌ๋ฌธ์€ Doxygen, JSDoc, EDoc, HeaderDoc ๋“ฑ ๋‹ค๋ฅธ ๋ฌธ์„œ ์ƒ์„ฑ๊ธฐ์—์„œ๋„ ์žฌ์‚ฌ์šฉ๋˜์–ด ์™”๋‹ค.

Javadoc์€ doclets(๋„ํด๋ฆฟ)๊ณผ taglets(ํƒœ๊ทธ๋ฆฟ)์„ ํ†ตํ•œ ํ™•์žฅ์„ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์ถœ๋ ฅ ํ˜•์‹์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ •์  ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, JDiff๋Š” API์˜ ๋‘ ๋ฒ„์ „ ๊ฐ„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด๊ณ ํ•œ๋‹ค.

์ผ๋ถ€์—์„œ๋Š” Javadoc๊ณผ ์ผ๋ฐ˜์ ์ธ API ๋ฌธ์„œ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋น„ํŒํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, Javadoc์„ ๋งŒ๋“  ๋™๊ธฐ ์ค‘ ํ•˜๋‚˜๋Š” ์ „ํ†ต์ ์ธ(์ž๋™ํ™”๊ฐ€ ๋œ ๋œ) API ๋ฌธ์„œ๊ฐ€ ์ „๋ฌธ ๊ธฐ์ˆ  ์ž‘๊ฐ€์˜ ๋ถ€์กฑ๊ณผ ๊ฐ™์€ ๋น„์ฆˆ๋‹ˆ์Šค์  ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ์ข…์ข… ๊ตฌ์‹์ด ๋˜๊ฑฐ๋‚˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.[4]

Javadoc์€ ์ฒซ ์ถœ์‹œ ๋•Œ๋ถ€ํ„ฐ ์ž๋ฐ”์˜ ์ผ๋ถ€์˜€์œผ๋ฉฐ, ์ž๋ฐ” ๊ฐœ๋ฐœ ํ‚คํŠธ์˜ ๊ฐ ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ ์ž์ฃผ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.[5]

Javadoc๊ณผ Javadoc์ด ์‚ฌ์šฉํ•˜๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ฃผ์„์€ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ฌด์‹œ๋˜๋ฏ€๋กœ ์ž๋ฐ” ์‹คํ–‰ ํŒŒ์ผ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

๋งˆํฌ์—…

[ํŽธ์ง‘]

Javadoc์€ ํŠน๋ณ„ํžˆ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ์ฃผ์„์€ ๋ฌด์‹œํ•œ๋‹ค. Javadoc ์ฃผ์„์€ ๋‹ค์ค‘ ํ–‰ ์ฃผ์„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ณ„ํ‘œ๋ฅผ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜์—ฌ /**๋กœ ํ‘œ์‹œํ•œ๋‹ค. ์ด์–ด์ง€๋Š” ์ค„์€ *๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ „์ฒด ์ฃผ์„ ๋ธ”๋ก์€ */๋กœ ๋๋‚˜์•ผ ํ•œ๋‹ค.

๋ฉ”์„œ๋“œ Javadoc ์ฃผ์„์˜ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

/**
 * ๋ฉ”์„œ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์„ค๋ช….
 *
 * @param input ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์„ค๋ช….
 * @return ๋ฐ˜ํ™˜๊ฐ’์— ๋Œ€ํ•œ ์„ค๋ช….
 * @throws Exception ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์„ค๋ช….
 */
public int methodName(String input) throws Exception { ... }

Javadoc์—์„œ๋Š” <p>, <head>, <nav>์™€ ๊ฐ™์€ ์ผ๋ถ€ HTML ํƒœ๊ทธ๋ฅผ ์ง€์›ํ•œ๋‹ค.

๋งˆํฌ๋‹ค์šด

[ํŽธ์ง‘]

์ž๋ฐ” 23๋ถ€ํ„ฐ Javadoc์€ ๊ธฐ์กด์˜ ๋‹ค์ค‘ ํ–‰ ํ˜•์‹ ๋Œ€์‹  ///๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ์„ ์ค„์—์„œ ๋งˆํฌ๋‹ค์šด ํ‘œ์ค€์ธ CommonMark๋ฅผ ์ง€์›ํ•œ๋‹ค.[6]

๋„ํด๋ฆฟ

[ํŽธ์ง‘]

๋„ํด๋ฆฟ(Doclet) ํ”„๋กœ๊ทธ๋žจ์€ Javadoc๊ณผ ์—ฐ๋™ํ•˜์—ฌ ๋ฌธ์„œ์— ํฌํ•จํ•  ์ฝ˜ํ…์ธ ๋ฅผ ์„ ํƒํ•˜๊ณ , ์ฝ˜ํ…์ธ ์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํ˜•์‹์„ ์ง€์ •ํ•˜๋ฉฐ, ๋ฌธ์„œ๋ฅผ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.[7] ๋„ํด๋ฆฟ์€ ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋˜๋ฉฐ Doclet API์„ ์‚ฌ์šฉํ•œ๋‹ค.

Javadoc์— ํฌํ•จ๋œ StandardDoclet์€ API ๋ฌธ์„œ๋ฅผ ํ”„๋ ˆ์ž„ ๊ธฐ๋ฐ˜์˜ HTML ํŒŒ์ผ๋กœ ์ƒ์„ฑํ•œ๋‹ค. ์›น์ƒ์—์„œ ๋‹ค๋ฅธ ๋„ํด๋ฆฟ๋“ค๋„ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ข…์ข… ๋ฌด๋ฃŒ๋กœ ์ œ๊ณต๋œ๋‹ค. ์ด๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค:

  • ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ฌธ์„œ ์ƒ์„ฑ (๋น„ API์šฉ)
  • PDF์™€ ๊ฐ™์ด HTML ์ด์™ธ์˜ ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ
  • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด๋‚˜ ์ž๋ฐ” ํด๋ž˜์Šค์—์„œ ์ƒ์„ฑ๋œ UML ๋‹ค์ด์–ด๊ทธ๋žจ์ด ํฌํ•จ๋œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ HTML๋กœ ์ถœ๋ ฅ

ํƒœ๊ทธ

[ํŽธ์ง‘]

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ผ๋ถ€ Javadoc ํƒœ๊ทธ[8] ๋ชฉ๋ก์€ ์•„๋ž˜ ํ‘œ์™€ ๊ฐ™๋‹ค:

๊ตฌ๋ฌธ ์‚ฌ์šฉ๋ฒ• ์ ์šฉ ๋Œ€์ƒ ๋„์ž… ๋ฒ„์ „
@author name"Pat Smith"์™€ ๊ฐ™์€ ์ €์ž๋ฅผ ์‹๋ณ„ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•
{@docRoot} ์ƒ์„ฑ๋œ ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ์ƒ์„ฑ๋œ ๋ฌธ์„œ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋Œ€ํ•œ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋ƒ„ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•, ํ•„๋“œ, ๋ฉ”์„œ๋“œ
@version version๋ฒ„์ „ ์ •๋ณด๋ชจ๋“ˆ, ํŒจํ‚ค์ง€, ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•
@since since-text์ด ๊ธฐ๋Šฅ์ด ์ฒ˜์Œ ์กด์žฌํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ์‹œ๊ธฐ๋ฅผ ์„ค๋ช…ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•, ํ•„๋“œ, ๋ฉ”์„œ๋“œ
@see reference๋ฌธ์„œ์˜ ๋‹ค๋ฅธ ์š”์†Œ๋กœ ๋งํฌํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•, ํ•„๋“œ, ๋ฉ”์„œ๋“œ
@param name description๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค๋ช…๋ฉ”์„œ๋“œ
@return description๋ฐ˜ํ™˜๊ฐ’์„ ์„ค๋ช…๋ฉ”์„œ๋“œ
@exception classname description
@throws classname description
์ด ๋ฉ”์„œ๋“œ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ์„ค๋ช…๋ฉ”์„œ๋“œ
@deprecated description๋ฉ”์„œ๋“œ๊ฐ€ ๊ตฌ์‹์ž„์„ ํ‘œ์‹œํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•, ํ•„๋“œ, ๋ฉ”์„œ๋“œ
{@inheritDoc}์˜ค๋ฒ„๋ผ์ด๋“œ๋œ ๋ฉ”์„œ๋“œ๋กœ๋ถ€ํ„ฐ ์„ค๋ช…์„ ๋ณต์‚ฌ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋ฉ”์„œ๋“œ1.4.0
{@link reference}๋‹ค๋ฅธ ์‹ฌ๋ณผ๋กœ์˜ ๋งํฌํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•, ํ•„๋“œ, ๋ฉ”์„œ๋“œ
{@linkplain reference} {@link}๊ณผ ๋™์ผํ•˜์ง€๋งŒ ๋งํฌ์˜ ๋ ˆ์ด๋ธ”์ด ์ฝ”๋“œ ๊ธ€๊ผด์ด ์•„๋‹Œ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ํ‘œ์‹œ๋จ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•, ํ•„๋“œ, ๋ฉ”์„œ๋“œ
{@value #STATIC_FIELD}์ •์  ํ•„๋“œ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜์ •์  ํ•„๋“œ1.4.0
{@code literal}๋ฆฌํ„ฐ๋Ÿด ํ…์ŠคํŠธ๋ฅผ ์ฝ”๋“œ ๊ธ€๊ผด๋กœ ์„œ์‹ํ™”. {@literal}๊ณผ ๋™์ผํ•จํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•, ํ•„๋“œ, ๋ฉ”์„œ๋“œ1.5.0
{@literal literal}๋ฆฌํ„ฐ๋Ÿด ํ…์ŠคํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ„. ํฌํ•จ๋œ ํ…์ŠคํŠธ๋Š” HTML ๋งˆํฌ์—…์ด๋‚˜ ์ค‘์ฒฉ๋œ javadoc ํƒœ๊ทธ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํ•ด์„๋จํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค, ์—ด๊ฑฐํ˜•, ํ•„๋“œ, ๋ฉ”์„œ๋“œ1.5.0
{@serial literal} ๊ธฐ๋ณธ์ ์ธ ์ง๋ ฌํ™” ๊ฐ€๋Šฅ ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋ƒ„ ํ•„๋“œ
{@serialData literal} writeObject( ) ๋˜๋Š” writeExternal( ) ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ„ ํ•„๋“œ, ๋ฉ”์„œ๋“œ
{@serialField literal} ObjectStreamField ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ„ ํ•„๋“œ

๊ฐ™์ด ๋ณด๊ธฐ

[ํŽธ์ง‘]

๊ฐ์ฃผ

[ํŽธ์ง‘]
  1. โ†‘ โ€œJavadocโ€. ใ€Šagile.csc.ncsu.eduใ€‹. 2017๋…„ 6์›” 13์ผ์— ์›๋ณธ ๋ฌธ์„œ์—์„œ ๋ณด์กด๋œ ๋ฌธ์„œ. 2022๋…„ 1์›” 12์ผ์— ํ™•์ธํ•จ.
  2. โ†‘ โ€œjavadoc - The Java API Documentation Generatorโ€. Sun Microsystems. 2011๋…„ 9์›” 30์ผ์— ํ™•์ธํ•จ..
  3. โ†‘ IntelliJ IDEA, NetBeans ๋ณด๊ด€๋จ 2017-04-05 - ์›จ์ด๋ฐฑ ๋จธ์‹  and Eclipse
  4. โ†‘ Venners, Bill; Gosling, James ์™ธ (2003๋…„ 7์›” 8์ผ). โ€œVisualizing with JavaDocโ€. artima.com. 2013๋…„ 1์›” 19์ผ์— ํ™•์ธํ•จ. When I did the original JavaDoc in the original compiler, even the people close around me pretty soundly criticized it. And it was interesting, because the usual criticism was: a good tech writer could do a lot better job than the JavaDoc does. And the answer is, well, yeah, but how many APIs are actually documented by good tech writers? And how many of them actually update their documentation often enough to be useful?
  5. โ†‘ โ€œHow to Write Doc Comments for the Javadoc Toolโ€. Sun Microsystems. 2011๋…„ 9์›” 30์ผ์— ํ™•์ธํ•จ..
  6. โ†‘ โ€œJEP 467: Markdown Documentation Commentsโ€. ใ€ŠOpenJDKใ€‹. 2023๋…„ 9์›” 11์ผ. 2025๋…„ 9์›” 10์ผ์— ํ™•์ธํ•จ.
  7. โ†‘ โ€œDoclet Overviewโ€.
  8. โ†‘ JavaSE 13 Documentation Comment Specification

์™ธ๋ถ€ ๋งํฌ

[ํŽธ์ง‘]