공부 기록/Java

[Java] Javadoc에 대해서 알아보자

뵤옹 2023. 7. 21. 15:45

프로젝트에 점점 살을 붙여가는 과정에서 신경쓰지 않던 /** */ 의 형태로 되어 있는 주석(?)을 보게되었다. 근데 일반적인 주석과 달리 @param @return에 색이 들어있는걸 보면서 무언가 기능이 있는 코드겠구나 싶어 찾아보았다.

해당 코드는 Javadoc이라는 걸 검색을 통해 알게되었고 이에 대해 찾아본 것들을 정리하려고 한다.

 

Javadoc이란

Javadoc은 JDK와 함께 패키지로 제공되는 도구로, JDK가 설치되어 있다면 사용할 수 있다.

Javadoc은 Java 소스 코드의 코드 문서를 생성하는 데 도움츨 주는 도구이다.

예를 들어 Javadoc은 html을 따로 작성하지 않고도 소스 코드에 작성된 코멘트를 따라 문서를 만들 수 있도록 한다. 또한 Javadoc에 따른 형식으로 작성해두면 일반적인 주석으로 읽을 수 있다.

 

Javadoc 작성 방법

기본적인 형식은 아래와 같이 사용한다.

/**
 *  주석
 *  주석
 *  주석
 */

Java에서 여러 줄의 주석을 쓸 때 쓰는 방법과 유사해보지만 첫 부분에 * 표시가 하나 더 붙는다.

기본적인 형태에서 이런 형식으로 작성할 수 있다.

/**
 *   이 클래스, 또는 메소드에 대한 설명 글
 *   @param x x좌표
 *   @param y y좌표
 *   @return
 */

Javadoc은 내부에서 크게 '설명문'과 '태그 섹션'으로 나뉜다.

설명문은 클래스 또는 메소드 등에 대해 간략하게 설명한 글이고, 여러 줄을 작성할 수 있다.

주석의 시작 부분에서 첫 번째 태그 섹션이 나타날 때까지의 영역이다. 또한, Html문으로 해석되기 때문에 단순히 행을 바꿔 작성하여도 줄바꿈이 되지 않고 명시적으로 <br>을 작성해야 줄바꿈이 일어난다.

 

태그 섹션은 @으로 시작하는 영역으로, 하나의 주석에 여러 종류를 동시에 작성할 수 있다.

또한 태그 섹션 이후로는 설명문을 작성할 수 없다.

 

Javadoc의 태그

@author 태그

  • 클래스, 인터페이스 등에 작성하고 작성자를 지정하는 데 사용한다.
  • 같은 주석 내에서 여러 번 지정할 수 있다.

@version 태그

  • 클래스, 인터페이스 등에 작성학 소프트웨어의 버전을 지정하기 위해 사용한다.
  • 같은 주석 내에서 여러 번 지정할 수 있다.
  • 비슷한 태그로 @since가 있다.(현재 버전이 아닌 도입된 버전을 지정하는 경우에 사용)
    → Javadoc의 -version 옵션을 지정한 경우에만 출력된다.

@See 태그

  • 관련 항목으로 외부 링크 또는 텍스트를 표시하거나, 다른 필드나 메소드에 대한 모든 참조 링크를 나타내는 경우에 사용한다.
  • 즉, Html 문장의 <a> 태그와 같은 형식으로 링크 및 레이블을 지정하여 사용한다.
  • 문자열을 표시할 경우, 쌍따옴표("")를 둘러싸서 지정해야 한다.

@deprecated 태그

  • 클래스나 메소드 등의 사용을 더이상 권장하지 않는 경우에 사용한다.
  • 즉, 차후에 없어질 수도 있다는 의미로 사용한다.

@param 태그

  • 매개변수에 대한 설명을 표시할 때 사용한다.
  • 설명 부분은 여러 줄에 걸쳐 작성할 수 있다.
  • 설명문과 동일하게 Html로 작성된다.

@return 태그

  • 반환 값에 대한 설명(데이터 유형 및 범위 등)을 표시할 때 사용한다.

@throws, @exception 태그

  • 두 태그는 발생할 수 있는 예외에 대한 설명을 표시할 때 사용한다.
  • 서로 이름만 다를 뿐 동일하게 사용된다.

{@link}, {@linkplain} 태그

  • {@link} 태그
    • 다른 Javadoc 태그 중에 참조 링크를 표시할 경우에 사용한다.
    • 이전까지의 태그들은 블록 태그라 불리지만, {@link} 태그는 인라인 태그라고 한다.
    • {}로 묶어 사용하는 수석을 설명문 안이나 다른 블록 태그 안의 문자열의 부분에 사용할 수 있다.
    • 연결 문자열은 코드 텍스트로 표시된다.
  • {@linkplain}
    • {@link} 태그와 사용방법이 동일하다.
    • 다른 Javadoc 태그에서 문자열을 표시할 위치에 참조링크를 표시할 경우에 사용한다.
    • 링크가 된 문자열이 일반 텍스트로 표시된다.
/**
 *   Javadoc 샘플 테스트
*/
public class Sample2 {
	/**
     *   이름 설정
     *   반환은 {@link Sample1#getName() getName}을 참조
     *
     *   @param name 이름
     */
     public void setName(String name) {
     }
     
     /**
      *   이름 반환
      *   설정은 {@link #setName(String)}을 참조
      *
      *   @return 이름을 String으로 반환
      */
      public String getName() {
      	return null;
      }
}

{@code} 태그

  • Javadoc에 예제 코드 작성시 사용된다.
  • 즉, 설명에 예제 코드를 첨부할 영역에 사용한다.
/**
 *   Javadoc 샘플 클래스 <br/>
 *
 *   <pre>
 *   {@code
 *   Foo foo = new Foo*();
 *   foo.foo();
 *   }
 *   </pre>
 */
public class Sample3 {
}

 

Javadoc 출력

IntelliJ를 기준으로 Javadoc을 출력하는 방법은 매우 간단하다.

shift 버튼 2번 연타 → 'generate JavaDoc' 입력 → 옵션 선택 → Generate 선택

세부 옵션을 통해 어떤 클래스들을 Javadoc에 포함시킬지 지정할 수 있다.

전체 프로젝트에 적용할 수도 있고, Custom scope를 선택하여 포함할 파일을 Include하고 제외할 파일을 Exclude할 수 도 있다.

이후 파일이 저장될 경로를 설정하고, 접근 제한자를 어디까지 포함시킬지 선택한다.

다만, 가장 중요한 점은 아래의 내용을 (Other) command line arguments에 추가해야 인코딩 에러가 발생하지 않는다.

-encoding UTF-8 -charset UTF-8 -docencoding UTF-8

 


[ 참 고 ]

https://agileryuhaeul.tistory.com/entry/Javadoc%EC%9D%B4%EB%9E%80-Javadoc-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95

https://creampuffy.tistory.com/81