π 1. λ¬Έμν μ£Όμ μμ± λ°©λ²
μλ°μλ μμ€μ½λ νμΌμμ λ¬Έμν μ£Όμ(doc comment; μλ°λ μ£Όμ)μ΄λΌλ νΉμν ννλ‘ κΈ°μ λ μ€λͺ μ μΆλ € API λ¬Έμλ‘ λ³ννμ¬ λ³΄μ¬μ£Όλ μλ°λ μ΄ μλ€.
λ¬Έμν μ£Όμμ μμ±νλ κ·μΉμ 'λ¬Έμν μ£Όμ μμ±λ²(How to Write Doc Comments)'μ κΈ°μ λμ΄ μλ€. ν΄λΉ λ¬Έμμ λν΄μ μΆκ°μ μΌλ‘ μμμΌ νλ λ΄μ©μ μλμ κ°λ€.
- APIλ₯Ό μ¬λ°λ‘ λ¬Έμννλ €λ©΄ 곡κ°λ λͺ¨λ ν΄λμ€, μΈν°νμ΄μ€, λ©μλ, νλ μ μΈμ λ¬Έμν μ£Όμμ λ¬μμΌ νλ€.
- μ§λ ¬νν μ μλ ν΄λμ€λΌλ©΄ μ§λ ¬ν ννμ κ΄ν΄μλ μ μ΄μΌ νλ€.
- κΈ°λ³Έ μμ±μμλ λ¬Έμν μ£Όμμ λ¬ λ°©λ²μ΄ μμΌλ κ³΅κ° ν΄λμ€λ μ λ κΈ°λ³Έ μμ±μλ₯Ό μ¬μ©νλ©΄ μ λλ€.
- μ μ§λ³΄μκΉμ§ κ³ λ €νλ€λ©΄ λλ€μμ 곡κ°λμ§ μμ ν΄λμ€, μΈν°νμ΄μ€, μμ±μ, λ©μλ, νλμλ λ¬Έμν μ£Όμμ λ¬μμΌ νλ€.
- λ©μλμ© λ¬Έμν μ£Όμμλ ν΄λΉ λ©μλμ ν΄λΌμ΄μΈνΈ μ¬μ΄μ κ·μ½μ λͺ λ£νκ² κΈ°μ ν΄μΌ νλ€.
- μμμ©μΌλ‘ μ€κ³λ ν΄λμ€μ λ©μλκ° μλλΌλ©΄ κ·Έ λ©μλκ° μ΄λ»κ² λμνλμ§κ° μλλΌ λ¬΄μμ νλμ§λ₯Ό κΈ°μ ν΄μΌ νλ€.
- λ¬Έμν μ£Όμμλ ν΄λΌμ΄μΈνΈκ° ν΄λΉ λ©μλλ₯Ό νΈμΆνκΈ° μν μ μ 쑰건(precondition)μ λͺ¨λ λμ΄ν΄μΌ νλ€.
- λν λ©μλκ° μ±κ³΅μ μΌλ‘ μνλ νμ λ§μ‘±ν΄μΌ νλ μ¬ν쑰건(postcondition)λ λͺ¨λ λμ΄ν΄μΌ νλ€.
- μ μ 쑰건과 μ¬ν쑰건λΏλ§ μλλΌ λΆμμ©λ λ¬Έμνν΄μΌ νλ€.
- λ©μλμ κ³μ½(contract)μ μλ²½ν κΈ°μ νλ €λ©΄ λͺ¨λ 맀κ°λ³μμ @param νκ·Έλ₯Ό, λ°ν νμ μ΄ voidκ° μλλΌλ©΄ @return νκ·Έλ₯Ό, λ°μν κ°λ₯μ±μ΄ μλ λͺ¨λ μμΈμ @throws νκ·Έλ₯Ό λ¬μμΌ νλ€.
- ν΄λμ€λ₯Ό μμμ©μΌλ‘ μ€κ³ν λλ μκΈ° μ¬μ© ν¨ν΄(self-use pattern)μ λν΄μλ λ¬Έμμ λ¨κ²¨ λ€λ₯Έ νλ‘κ·Έλλ¨Έμκ² κ·Έ λ©μλλ₯Ό μ¬λ°λ‘ μ¬μ μνλ λ°©λ²μ μλ €μ€μΌ νλ€. (@implSpec νμ©)
- κ° λ¬Έμν μ£Όμμ 첫 λ²μ§Έ λ¬Έμ₯μ ν΄λΉ μμμ μμ½ μ€λͺ (summary description)μΌλ‘ κ°μ£Όλλ€.
- μμ½ μ€λͺ μ λ°λμ λμμ κΈ°λ₯μ κ³ μ νκ² κΈ°μ ν΄μΌ νλ€.
- ν΄λμ€, μΈν°νμ΄μ€, νλμ μμ½ μ€λͺ μ λμμ μ€λͺ νλ λͺ μ¬μ μ΄μ΄μΌ νλ€.
- μ λ€λ¦ νμ μ΄λ μ λ€λ¦ λ©μλλ₯Ό λ¬Έμνν λλ λͺ¨λ νμ 맀κ°λ³μμ μ£Όμμ λ¬μμΌ νλ€.
- μ΄κ±°νμ μ λ¬Έμνν λλ μμλ€μλ μ£Όμμ λ¬μμΌ νλ€.
- μλν μ΄μ νμ μ λ¬Έμνν λλ λ©€λ²λ€μλ λͺ¨λ μ£Όμμ λ¬μμΌ νλ€.
- ν¨ν€μ§λ₯Ό μ€λͺ νλ λ¬Έμν μ£Όμμ package-info.java νμΌμ μμ±νλ€.
- λͺ¨λ μμ€ν μ μ¬μ©νλ€λ©΄ λͺ¨λ κ΄λ ¨ μ€λͺ μ module-info.java νμΌμ μμ±νλ€.
- ν΄λμ€ νΉμ μ μ λ©μλκ° μ€λ λ μμ νλ κ·Έλ μ§ μλ , μ€λ λ μμ μμ€μ λ°λμ API μ€λͺ μ ν¬ν¨ν΄μΌ νλ€.
- 볡μ‘ν APIλΌλ©΄ λ¬Έμν μ£Όμ μΈμλ μ 체 μν€ν μ²λ₯Ό μ€λͺ νλ λ§ν¬λ₯Ό μ 곡νλ©΄ μ’λ€.
π 2. λ¬Έμν μ£Όμ μμ± μ λμμ΄ λλ νκ·Έ λͺ©λ‘
π 1. HTML νκ·Έ μ¬μ©
/**
* ...
* <p>This method is <i>not</i> guarenteed to run in constant</p>
* ...
*/
μλ°λ μ νΈλ¦¬ν°λ λ¬Έμν μ£Όμμ HTMLλ‘ λ³ννλ―λ‘ λ¬Έμν μ£Όμ μμ HTML μμλ€μ΄ μ΅μ’ μ μΌλ‘ HTML λ¬Έμμ λ°μλλ€.
π 2. {@code}
/**
* ...
* @throws IndexOutOfBoundsException if the index is out of range
* ({@code index < 0 || index >= this.size()})
* ...
*/
νκ·Έλ‘ κ°μΌ λ΄μ©μ ν¬ν¨λ HTML μμλ λ€λ₯Έ μλ°λ νκ·Έλ₯Ό 무μνλ€. κ·Έλ κΈ° λλ¬Έμ HTML λ©νλ¬ΈμμΈ < κΈ°νΈ λ±μ λ³λ€λ₯Έ μ²λ¦¬ μμ΄ λ°λ‘ μ¬μ©ν μ μλ κ²μ΄λ€.
μ¬λ¬ μ€λ‘ λ μ½λλ₯Ό μμλ‘ λ£κ³ μΆμΌλ©΄ μλμ κ°μ΄ <pre> νκ·Έλ₯Ό μ΄μ©νλ©΄ λλ€.
/**
* ...
* @throws IndexOutOfBoundsException if the index is out of range
* (<pre>{@code ... μ½λ ... }</pre>)
* ...
*/
π 3. {@literal}
/**
* ...
* {@literal {r} < 1} μ΄λ©΄ κΈ°ν μμ΄μ΄ μλ ΄νλ€.
* ...
*/
{@literal}μ μ΄μ©νμ¬ HTML λ©νλ¬Έμλ₯Ό ν¬ν¨μν¬ μ μλ€. μ΄κ² λν {@code}μ²λΌ HTML λ§ν¬μ μ΄λ μλ°λ νκ·Έλ₯Ό 무μνκ² ν΄ μ€λ€. {@code}μμ μ°¨μ΄μ μ μ½λ ν°νΈλ‘ λ λλ§μ νμ§ μλλ€λ κ²μ΄λ€.
κ·Έλ¦¬κ³ μ΄λ₯Ό μ΄μ©νμ¬ μλμΉ μμ λ§μΉ¨νλ₯Ό ν¬ν¨ν ν μ€νΈλ₯Ό μμ±ν μ μλ€.
/**
* ...
* A suspect, such as Colonel Mustard or {@literal Mrs. Peacock}.
* ...
*/
π 4. {@index}
/**
* ...
* This method complies with the {@index IEEE 754} standard.
* ...
*/
μλ° 9λΆν°λ μλ°λ μ΄ μμ±ν HTML λ¬Έμμ κ²μ(μμΈ) κΈ°λ₯μ΄ μΆκ°λμλ€. {@index} νκ·Έλ₯Ό μ¬μ©ν΄ APIμμ μ€μν μ©μ΄λ₯Ό μΆκ°λ‘ μμΈν ν μ μλ€.
π 5. {@inheritDoc}
{@inhericDoc} νκ·Έλ₯Ό μ¬μ©ν΄ μμ νμ μ λ¬Έμν μ£Όμ μΌλΆλ₯Ό μμν μ μλ€. μ΄λ μμ μ΄ κ΅¬νν μΈν°νμ΄μ€μ λ¬Έμν μ£Όμμ 볡μ¬ν΄ λΆμ¬ λ£μ§ μκ³ μ¬μ¬μ©ν μ μλ€λ λ»μ΄λ€.
ν΄λΉ κΈμ Joshua Bloch λμ 'Effective Java 3/E'λ₯Ό μ°Έκ³ νμμ΅λλ€.