item 56 hyowon - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
μ΄λ² itemμμλ javaDoc μμ± κ·μΉμ λ€λ£¬λ€.
μμ€μ½λ νμΌμμ λ¬Έμν μ£Όμ(doc comment)μ΄λΌλ νΉμν ννλ‘ κΈ°μ λ μ€λͺ μ μΆλ € API λ¬Έμλ‘ λ³νν΄μ£Όλ μ νΈλ¦¬ν°
- λ¬Έμν μ£Όμ μμ±λ²(How to Write Doc Comments)
- @inheritDoc κ΄λ ¨ μ€λΌν΄ 곡μ λ¬Έμ
λ¬Έμν μ£Όμ μμ±λ²μ java 4 μ΄νλ‘ 15λ μ§Έ κ°±μ λμ§ μκ³ μλ€. java 5, 8, 9μ κ°±μ λ @literal, @code, @implSpec μ μ μΉνμ΄μ§μ μ€λͺ μ΄ μμΌλ―λ‘ μ΄λ² μ₯μμ μ€λͺ ν κ²μ΄λ€.
- APIμ 곡κ°λ λͺ¨λ ν΄λμ€, μΈν°νμ΄μ€, λ©μλ, νλ μ μΈμ λ¬Έμν μ£Όμμ λ¬μμΌ νλ€.
κΈ°λ³Έ μμ±μμλ μ£Όμμ λ¬ μ μμΌλ, κ³΅κ° ν΄λμ€λ μ λ κΈ°λ³Έ μμ±μλ₯Ό μ¬μ©νμ§ μλλ€. μ μ§λ³΄μκΉμ§ κ³ λ €νλ€λ©΄ 곡κ°λμ§ μλ ν΄λμ€,μΈν°νμ΄μ€,μμ±μ,λ©μλ,νλμλ κ°λ¨ν λ¬Έμν μ£Όμμ λ€λ κ²μ΄ μ’λ€.
- λ©μλμ© λ¬Έμν μ£Όμμλ λ©μλ-ν΄λΌμ΄μΈνΈ μ¬μ΄μ κ·μ½μ λͺ λ£νκ² κΈ°μ νλ€.
1.μμμ©μΌλ‘ μ€κ³λ ν΄λμ€κ° μλλΌλ©΄ howκ° μλ whatμ κΈ°μ νλ€.
2.λ©μλ νΈμΆμ μν μ μ 쑰건(precondition)μ λͺ¨λ λμ΄νλ€. @throws νκ·Έ
3.λ©μλκ° μ±κ³΅μ μΌλ‘ μνλ ν λ§μ‘±ν΄μΌ νλ μ¬ν쑰건(postcondition)λ λͺ¨λ λμ΄νλ€.
4.λΆμμ©λ λ¬Έμννλ€.
λΆμμ©μ΄λ? β μ¬ν쑰건μΌλ‘ λͺ νν λνλμ§λ μμ§λ§ μμ€ν μνμ μ΄λ ν λ³νλ₯Ό κ°μ Έμ€λ κ². μλ₯Ό λ€λ©΄, λ°±κ·ΈλΌμ΄λ μ€λ λλ₯Ό μμμν€λ λ©μλλΌλ©΄ λ¬Έμμ λ°νμΌ νλ€.
5.λͺ¨λ 맀κ°λ³μμ @param νκ·Έλ₯Ό, (voidκ° μλλΌλ©΄)λ°ννμ μ @return νκ·Έλ₯Ό λ¨λ€.
νλΌλ―Έν°, 리ν΄, ν΄λμ€, μΈν°νμ΄μ€, νλλ λͺ μ¬μ λ‘ μ€λͺ μ μμ±νκ³ , λ©μλλ λμ¬κ΅¬λ‘ μ€λͺ μ μμ±νλ€. @param, @return, @throws μ€λͺ μλ λ§μΉ¨νλ₯Ό λΆμ΄μ§ μλλ€.
- μλ°λ μ λ¬Έμν μ£Όμμ htmlλ‘ λ³ννλ―λ‘ htmlμμλ₯Ό μ¬μ© κ°λ₯νλ€.
7.@code : μ½λμ© ν°νΈλ‘ λ³ν. (htmlμμλ μλ°λ νκ·Έλ₯Ό 무μ)
8.<pre></pre>
: @code μμ μ€λ°κΏμ΄ κ·Έλλ‘ μ μ§λ¨
9.this : μΈμ€ν΄μ€ λ©μλμ thisλ νΈμΆλ λ©μλκ° μ리ν κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
μμ λͺ¨λ κ·μ½μ΄ λ€μ΄κ° μμ
/**
* Returns the element at the specified position in this list.
*
* <p>This method is <i>not</i> guaranteed to run in constant
* time. In some implementations it may run in time proportional
* to the element position.</p>
*
* @param index index of the element to return
* @return the element at the specified position in this list
* @throws IndexOutOfBoundsException if the index is out of range
* (<tt>index < 0 || index >= size()</tt>)
*/
E get(int index);
μΌλ°μ μΈ λ¬Έμν μ£Όμμ ν΄λΉ λ©μλ - ν΄λΌμ΄μΈνΈ μ¬μ΄μ κ³μ½μ μ€λͺ νλ€.
νμ§λ§ μ΄ μ£Όμμ ν΄λΉ λ©μλ - νμ ν΄λμ€ μ¬μ΄μ κ³μ½μ μ€λͺ νμ¬, νμ ν΄λμ€λ€μ΄ κ·Έ λ©μλλ₯Ό μμνκ±°λ super ν€μλλ₯Ό μ΄μ©ν΄ νΈμΆν λ κ·Έ λ©μλκ° μ΄λ»κ² λμνλμ§λ₯Ό λͺ νν μΈμ§νκ³ μ¬μ©νλλ‘ ν΄μ€μΌ νλ€.
(java 11 κΈ°μ€)μ΅μ μλ°λ²μ μΈ μμ§λ μλ°λ
λͺ
λ Ήμ€μ -tag "implSpec:a:Implementation Requirements:"
μ€μμΉλ₯Ό μΌμ€μΌ μ΄ νκ·Έλ₯Ό μΈμνλ€.
/**
* Returns true if this collection is empty.
*
* @implSpec
* This implementation returns {@code this.size() == 0}
*
* @return true if this collection is empty
*/
public boolean isEmpty() {...}
<, >, & λ±μ HTML λ§ν¬μ μ΄λ μλ°λ νκ·Έλ₯Ό 무μνκ² ν΄μ€λ€.
κ° λ¬Έμν μ£Όμμ 첫 λ²μ§Έ λ¬Έμ₯μ ν΄λΉ μμμ μμ½ μ€λͺ (summary description)μΌλ‘ κ°μ£Όλλ€.
λ©μλμ μμ±μμ μμ½ μ€λͺ μ λμ¬κ΅¬μ¬μΌ νλ€.
μμ½ μ€λͺ μ΄ λλλ κΈ°μ€μ {<λ§μΉ¨ν><곡백><λ€μ λ¬Έμ₯ μμ>} ν¨ν΄μ <λ§μΉ¨ν> κΉμ§λ€.
곡백μ κΈ°μ€μ space, tab, new lineμ΄λ©° λ€μ λ¬Έμ₯ μμμ κΈ°μ€μ 'μλ¬Έμκ° μλ' λ¬Έμλ€.
μ μ’μ μλ₯Ό λ€μ΄λ³΄μ
/**
* A suspect, such as Colonel Mustart or Mrs. Peacock.
*/
public class Suspect{ ... }
μ μμμ μμ½ μ€λͺ μ A suspect, such as Colonel Mustart or Mrs. κΉμ§μ΄λ€. μμΉ μλ μν©μ νΌνκ³ μΆλ€λ©΄, μλμΉ μμ λ§μΉ¨νλ₯Ό ν¬ν¨ν ν μ€νΈλ₯Ό {@literal}λ‘ κ°μΈμ£Όμ.
/**
* A suspect, such as Colonel Mustart or {@literal Mrs. Peacock}.
*/
public class Suspect{ ... }
μλ° 9λΆν°λ μλ°λ μ΄ μμ±ν htmlλ¬Έμμ μμΈ κΈ°λ₯μ΄ μΆκ°λμλ€.
API λ¬Έμ μ€λ₯Έμͺ½ μ κ²μμ°½μμ κΈ°λ³Έμ μΌλ‘ ν΄λμ€, λ©μλ, νλ λ±μ κ²μν μ μμΌλ©°,
μΆκ°λ‘ {@index} νκ·Έλ₯Ό μ¬μ©ν΄ μ¬λ¬λΆμ APIμμ μ€μν μ©μ΄λ₯Ό μμΈνν μ μλ€.
μ λ€λ¦ νμ μ΄λ μ λ€λ¦ λ©μλλ₯Ό λ¬Έμνν λλ λͺ¨λ νμ 맀κ°λ³μμ μ£Όμμ λ¬μ
μμλ€μλ μ£Όμμ λ¬μ. μ΄κ±° νμ μ체μ κ·Έ μ΄κ±°νμ μ public λ©μλκΉμ§ μ£Όμμ λ¨λ€.
λ©€λ²λ€μλ λͺ¨λ μ£Όμμ λ¨λ€. μ λν μ΄μ νμ μ체λ λ¨λ€.
μ λν
μ΄μ
νμ
μ μμ½ μ€λͺ
μ νλ‘κ·Έλ¨ μμμ μ΄ μ λν
μ΄μ
μ λ€λ κ²μ΄ μ΄λ€ μλ―ΈμΈμ§λ₯Ό μ€λͺ
νλ λμ¬κ΅¬λ‘ μμ±νλ€.
package-info.java νμΌμ μμ±νλ€.
μ΄ νμΌμ ν¨ν€μ§ μ μΈμ λ°λμ ν¬ν¨ν΄μΌ νλ©°, ν¨ν€μ§ μ μΈ κ΄λ ¨ μ λν μ΄μ μ μΆκ°λ‘ ν¬ν¨ν μλ μλ€.
λͺ¨λ κ΄λ ¨ μ€λͺ μ module-info.javaμ μμ±νλ€.
ν΄λμ€ or μ μ λ©μλκ° μ€λ λ μμ νλ κ·Έλ μ§ μλ , μ€λ λ μμ μμ€μ λ°λμ API μ€λͺ μ ν¬ν¨ν΄μΌ νλ€.
μ§λ ¬νν μ μλ ν΄λμ€λΌλ©΄ μ§λ ¬ν ννμ κ΄ν΄μλ μ μ΄μΌ νλ€.
λ¬Έμν μ£Όμμ΄ μλ API μμλ₯Ό λ°κ²¬νλ©΄ μλ°λ μ κ°μ₯ κ°κΉμ΄ λ¬Έμν μ£Όμμ μ°Ύμμ€λ€. μμ 'ν΄λμ€'λ³΄λ€ κ·Έ ν΄λμ€κ° ꡬνν 'μΈν°νμ΄μ€'λ₯Ό λ¨Όμ μ°Ύλλ€.
μ΄ κΈ°λ₯μ νμ©νλ©΄ κ±°μ λκ°μ λ¬Έμν μ£Όμ μ¬λ¬ κ°λ₯Ό μ μ§λ³΄μνλ λΆλ΄μ μ€μΌ μ μμ§λ§, μ¬μ©νκΈ° κΉλ€λ‘κ³ μ μ½μ΄ μλ€. (μ°Έκ³ : μ€λΌν΄ 곡μ λ¬Έμ http://bit.ly/2vqmCzj)
μ¬λ¬ ν΄λμ€κ° μνΈμμ©νλ 볡μ‘ν APIλΌλ©΄ λ¬Έμν μ£Όμ μΈμλ μ 체 μν€ν μ²λ₯Ό μ€λͺ νλ λ³λμ μ€λͺ μ΄ νμν λκ° μλ€. μ΄λ° μ€λͺ λ¬Έμκ° μλ€λ©΄ κ΄λ ¨ ν΄λμ€λ ν¨ν€μ§μ λ¬Έμν μ£Όμμμ κ·Έ λ¬Έμμ λ§ν¬λ₯Ό μ 곡νμ.
μλ°λ λ¬Έμλ₯Ό μ¬λ°λ₯΄κ² μμ±νλμ§ νμΈνλ κΈ°λ₯
- java 7 : λͺ λ Ήμ€μμ -Xdoclint μ€μμΉλ₯Ό μΌμ€λ€.
- java 8 : μ κΈ°λ₯μ΄ κΈ°λ³ΈμΌλ‘ μλνλ€.
- IDE νλ¬κ·ΈμΈ checkStyle
- HTML μ ν¨μ± κ²μ¬κΈ°λ₯Ό μ¬μ©
- W3C λ§ν¬μ κ²μ¬ μλΉμ€(W3C-validator)
κ·Έλ¬λ, μλ°λ μ΄ μ μ°μλμ§ νμΈνλ νμ€ν λ°©λ²μ κ²°κ΅ μλ°λ μ νΈλ¦¬ν°κ° μμ±ν μΉνμ΄μ§λ₯Ό μ½μ΄λ³΄λ κΈΈλΏμ΄λ€.