Item 56. Doc Comment

곡개된 API μš”μ†Œμ—λŠ” 항상 λ¬Έμ„œν™” 주석을 μž‘μ„±ν•˜λΌ

곡개된 APIλ₯Ό μ˜¬λ°”λ‘œ λ¬Έμ„œν™”ν•˜κΈ° μœ„ν•΄μ„  μ•„λž˜μ˜ μš”κ±΄λ“€μ„ μΆ©μ‘±ν•΄μ•Ό ν•œλ‹€.

  • 곡개된 λͺ¨λ“  클래슀, μΈν„°νŽ˜μ΄μŠ€, λ©”μ„œλ“œ, ν•„λ“œ 선언에 λ¬Έμ„œν™” 주석을 달아야 ν•œλ‹€.

  • 직렬화 κ°€λŠ₯ 클래슀라면 직렬화 ν˜•νƒœμ— κ΄€ν•΄μ„œλ„ λ¬Έμ„œν™”ν•΄μ•Ό ν•œλ‹€.

  • μŠ€λ ˆλ“œ μ•ˆμ „ν•˜λ“  μ•ˆν•˜λ“  μŠ€λ ˆλ“œ μ•ˆμ „ μˆ˜μ€€μ„ λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.

  • μœ μ§€λ³΄μˆ˜κΉŒμ§€ κ³ λ €ν•œλ‹€λ©΄ κ³΅κ°œλ˜μ§€ μ•Šμ€ 클래슀, μΈν„°νŽ˜μ΄μŠ€, μƒμ„±μž, λ©”μ„œλ“œ, ν•„λ“œμ—λ„ κ°„λž΅ν•˜κ²Œλ‚˜λ§ˆ λ¬Έμ„œν™” 주석을 λ‹¬μ•„λ‘λŠ” 것이 μ’‹λ‹€.

  • κΈ°λ³Έ μƒμ„±μžμ—λŠ” λ¬Έμ„œν™” 주석을 달 수 μ—†μœΌλ‹ˆ κΈ°λ³Έ μƒμ„±μžλ₯Ό μ‚¬μš©ν•˜λ©΄ μ•ˆλœλ‹€.

  • 첫 번째 λ¬Έμž₯은 μš”μ•½ μ„€λͺ…μœΌλ‘œ κ°„μ£Όλ˜κΈ° λ•Œλ¬Έμ— λŒ€μƒμ˜ κΈ°λŠ₯을 κ³ μœ ν•˜κ²Œ κΈ°μˆ ν•΄μ•Ό ν•œλ‹€.

λ©”μ„œλ“œ λ¬Έμ„œν™” 주석

특히 λ©”μ„œλ“œ λ¬Έμ„œν™” 주석은 ν•΄λ‹Ή λ©”μ„œλ“œμ™€ ν΄λž‘λ¦¬μ–ΈνŠΈ μ‚¬μ΄μ˜ κ·œμ•½μ„ λͺ…λ£Œν•˜κ²Œ κΈ°μˆ ν•΄μ•Ό ν•œλ‹€.

  • μ–΄λ–»κ²Œ(how)κ°€ μ•„λ‹Œ 무엇(what)을 ν•˜λŠ”μ§€λ₯Ό 기술

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•œ μ „μ œμ‘°κ±΄(precondition) 기술

    • 일반적으둜 @throws νƒœκ·Έλ‘œ 비검사 μ˜ˆμ™Έλ₯Ό μ„ μ–Έν•˜μ—¬ μ•”μ‹œμ μœΌλ‘œ 기술

  • λ©”μ„œλ“œ μˆ˜ν–‰ ν›„ λ§Œμ‘±ν•΄μ•Ό ν•˜λŠ” 사후쑰건(postcondition)을 기술

  • λΆ€μ‹œμŠ€ν…œμ˜ μƒνƒœμ— 영ν–₯을 λ―ΈμΉ˜λŠ” 경우 λΆ€μž‘μš©(side effect)을 기술

  • @param, @return νƒœκ·Έ μ‚¬μš©ν•˜μ—¬ λ©”μ„œλ“œμ˜ λ§€κ°œλ³€μˆ˜μ™€ λ°˜ν™˜κ°’ 기술

    • 관둀상 ν•΄λ‹Ή λ§€κ°œλ³€μˆ˜κ°€ λœ»ν•˜λŠ” κ°’μ΄λ‚˜ λ°˜ν™˜κ°’μ˜ 의미λ₯Ό κ°„λž΅ν•˜κ²Œ 기술

  • @throws νƒœκ·Έ μ‚¬μš©ν•˜μ—¬ λ©”μ„œλ“œκ°€ 던질 수 μžˆλŠ” λͺ¨λ“  μ˜ˆμ™Έ 기술(검사/비검사 λͺ¨λ‘)

μœ„ κ·œμΉ™μ„ 지킨 λ¬Έμ„œν™” 주석 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

class Example {
    /**
     * 이 λ¦¬μŠ€νŠΈμ—μ„œ μ§€μ •ν•œ μœ„μΉ˜μ˜ μ›μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.
     *
     * <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>이 λ©”μ„œλ“œλŠ” μƒμˆ˜ μ‹œκ°„μ— μˆ˜ν–‰λ¨μ„ 보μž₯ν•˜μ§€ <i>μ•ŠλŠ”λ‹€</i>. κ΅¬ν˜„μ— 따라
     * μ›μ†Œμ˜ μœ„μΉ˜μ— λΉ„λ‘€ν•œ μ‹œκ°„μ΄ 걸릴 μˆ˜λ„ μžˆλ‹€.
     *
     * @param  index λ°˜ν™˜ν•  μ›μ†Œμ˜ 인덱슀; 0 이상이고 리슀트 크기보닀 μž‘μ•„μ•Ό ν•œλ‹€.
     * @return 이 λ¦¬μŠ€νŠΈμ—μ„œ μ§€μ •ν•œ μœ„μΉ˜μ˜ μ›μ†Œ
     * @throws IndexOutOfBoundsException index λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λ©΄,
     *         ({@code index < 0 || index >= this.size()})이면 λ°œμƒν•œλ‹€.
     */
    E get(int index);
}
// `{@code ...}` νƒœκ·ΈλŠ” μ½”λ“œλ₯Ό 인라인으둜 ν¬ν•¨μ‹œν‚€λŠ” νƒœκ·Έλ‘œ, μ½”λ“œλ₯Ό μΈμš©ν•˜λŠ” 것과 같은 효과λ₯Ό λ‚΄λŠ”λ°, μ½”λ“œμš© 폰트둜 λ Œλ”λ§ν•΄μ£Όλ©΄μ„œ HTML νŠΉμˆ˜λ¬Έμžλ‚˜ λ‹€λ₯Έ μžλ°”λ… νƒœκ·Έλ₯Ό λ¬΄μ‹œν•΄μ€€λ‹€.
// λΉ„μŠ·ν•œ νƒœκ·Έλ‘œ `{@literal ...}` νƒœκ·Έκ°€ μžˆλŠ”λ°, μ΄λŠ” HTML 특수문자λ₯Ό λ¬΄μ‹œν•΄μ£ΌλŠ” 효과만 있고 μ½”λ“œμš© 폰트둜 λ Œλ”λ§ν•΄μ£Όμ§€λŠ” μ•ŠλŠ”λ‹€.

κ·Έ 외에 νŠΉμˆ˜ν•œ λ¬Έμ„œν™” 주석

κ·Έ 외에 μ œλ„€λ¦­ νƒ€μž…, μ—΄κ±° νƒ€μž…, μ• λ„ˆν…Œμ΄μ…˜ νƒ€μž…μ„ λ¬Έμ„œν™”ν•  λ•ŒλŠ” 좔가적인 주석을 달아야 ν•œλ‹€.

  • μ œλ„€λ¦­ νƒ€μž… : λͺ¨λ“  νƒ€μž… λ§€κ°œλ³€μˆ˜

  • μ—΄κ±° νƒ€μž… : λͺ¨λ“  μƒμˆ˜

  • μ• λ„ˆν…Œμ΄μ…˜ νƒ€μž… : λͺ¨λ“  멀버

Last updated

Was this helpful?