티스토리 뷰
Javadoc 오류가 발생 !
Open source에 특정 기능을 구현하고 있었습니다. 특정 기능을 구현하고, 메서드 설명(javadoc)에 아래 예시처럼 작성을 완료하였습니다.
/**
* ~
* ~
* ~ when maxQueueSize > 0
* ~
* ~
*/
public void specificMethod(int maxQueueSize) {
...
}
기능 테스트 상 이상은 없었으나 build시 제목과 같은 `error: bad use of '>'` javadoc 에러가 발생했습니다.
javadoc은 사실 많이 작성해보지 않은 터라, 이런 에러에 대해서도 당황했고, "'>' 문자가 잘못된 사용이라는 건가?", "왜?"라는 의문이 먼저 들었습니다. 그러다보니 '>' 사용 에러가 아닌 다른 오류겠지 하며 stacktrace를 확인했는데 다른 오류는 없다는 것을 알게 되었습니다.
그럼 '>'를 javadoc에서 사용하는 것이 왜 잘못된 것일까?
정답을 먼저 말씀드리자면, '>'를 사용하는 것이 잘못된 것은 아니고 단순히 Plain text로 '>'만 사용하는 것이 잘못된 사용법인 것입니다.
이러한 빌드오류를 막기 위해. 즉, '>'의 올바른 사용법은 '{@code ... > ...}' 처럼 @code Javadoc tag를 사용하면 됩니다.
예를 들어, 위 예제를 올바른 사용법으로 바꿔보면 다음과 같습니다.
/**
* ~
* ~
* ~ when {@code maxQueueSize > 0}
* ~
* ~
*/
public void specificMethod(int maxQueueSize) {
...
}
당연히도 '<' 문자 또한 위와 같이 @code Javadoc tag를 사용해주어야 합니다.
정답을 알았으니, 왜 '>', '<' 같은 문자들의 경우 왜 Javadoc tag를 사용해가며 처리를 해주어야하는 것일까?
이유는 사실 단순한데요, HTML/XML tag 및 Java generic 사용 시와 겹치는 문자이기 때문입니다.
Javadoc 내부에는 HTML/XML tag가 사용될 수 있고, 그러한 tag 내부에서 Java 코드(code snippet)가 사용될 수 있습니다. 그렇기에 쌍이 아닌 '>', '<' 문자들이 단독으로 사용되면 위 사용법과 혼동이 되어 tag, code 들이 제대로 작성되지 않을 수 있으므로 잘못된 사용법(bad use)으로 규정하고있고 이를 막고 있는 것입니다.
{@code} Javadoc tag
문제를 해결해 준 {@code}에 대해서 알아봅시다. {@code} Javadoc tag는 Java 5에 등장했습니다.
Javadoc에서 Java 코드(code snippet)을 작성하고 싶은 경우가 많은데, 그런 경우 코드를 그냥 plain text로 적으면 앞서 말한 '<', '>' 문자도 그렇고 코드를 올바르게 표현해주지 못하는 경우가 있습니다. 그렇기에 코드작성에 {@code} tag를 사용하면 앞선 문제들을 해결할 수 있습니다.
<pre> HTML tag
갑작스럽지만 Javadoc 작성 시 원하는대로 동작하지 않는 경우가 하나가 더 있는데, 바로 줄 바꿈(line breaks)과 들여쓰기(indentation) 입니다. 왠지는 모르겠지만... 줄 바꿈과 들여쓰기가 지원이 되지 않아 빌드했을 때 다 붙어서, 원하지 않는 형태로 작성된 것을 보는 경우가 적지 않았습니다.
이런 경우엔 <pre> HTML tag를 사용해 문제를 해결할 수 있습니다.. HTML을 배워 봤으면 아시겠지만 <pre>는 performatted text를 위한 HTML에서 기본으로 지원하는 tag입니다. HTML 렌더링 시 <pre> tag 내에 있는 것은 문자 그대로 표현되어지게 됩니다. 즉, 줄 바꿈과 들여쓰기 또한 유지가 되어 원하는 형태로 작성할 수 있습니다.
물론, 앞선 문제처럼 '<', '>'는 <pre> tag 내부에서 사용하더라도 제대로 표시되지 않습니다. <pre> tag 자체가 HTML 태그이고, 내부에 다른 HTML tag가 들어갈 수 있기 때문에 혼동이 될 수 있는 '<'. '>'는 사용할 수 없습니다.
<pre> , {@code} 같이 사용하기
앞에서 언급하진 않았지만, {@code} 내부에 줄 바꿈과 들여쓰기를 작성하더라도 지원되지 않습니다.
결국엔 '<', '>' 같은 특정 문자들을 다 사용하며 코드 표현을 하고 싶으면서, 줄 바꿈 및 들여쓰기도 사용하고 싶다면 <pre>, {@code} tag를 함께 사용해야합니다.
/**
* <pre>{@code
* public void specificMethod(int maxQueueSize) {
*
* // indentation and line breaks are kept
*
* List<Integer> someData = null;
*
* }</pre>
*/
public void specificMethod(int maxQueueSize) {
...
}
위 내용의 대부분은 아래 블로그에서 참조하였습니다. 위 내용들을 요약해놓고 한 눈에 보기 좋은 표들이 정리되어있어서 한 번 보시면 좋을 것 같네요 :)
이것 외에 전체적인 Javadoc의 작성법을 알고 싶다면 아래 주소를 참고하면 좋을 것 같습니다. (저도 잘 몰라 배워야 하는 부분입니다 😂)
https://www.oracle.com/kr/technical-resources/articles/java/javadoc-tool.html
'Development > ETC' 카테고리의 다른 글
IntelliJ의 Hint - inlay hint 사용하기 (0) | 2022.08.06 |
---|---|
[Docker] docker-compose 에서 multiple commands 를 사용하는 법 (0) | 2021.07.29 |
[NS3] CSMA example (0) | 2021.01.23 |
[TCP] BIC-TCP (0) | 2021.01.23 |
Github 원하지 않는 개발언어로 등록된 경우 (0) | 2021.01.22 |
- Total
- Today
- Yesterday
- boj
- 클린 아키텍처
- Istio
- container
- hexagonal architecture
- 백준
- WebFlux
- java
- 로그
- jasync
- tag
- Kubernetes
- Algorithm
- MySQL
- 하루
- gradle
- Spring boot
- Spring
- Log
- python
- Intellij
- k8s
- Clean Architecture
- 비동기
- 쿠버네티스
- docker
- 일상
- 알고리즘
- HTTP
- c++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |