JavaDoc 지원 중단 또는 Java 주석을 사용해야합니까?


81

현재 Java에서 코드를 depreacted로 표시하는 두 가지 방법이 있습니다.

JavaDoc을 통해

/**
 * @deprecated
 */

또는 주석으로 :

@Deprecated

이것은 내 문제입니다. Eclipse를 사용할 때 메서드를 사용하지 않는 것으로 표시 할 때 둘 다 선언하는 것이 너무 많다는 것을 알았습니다. 나는 정말로 그들 중 하나를 사용하고 싶습니다.

그러나 주석을 사용하면 컴파일러에게 실제로 유용한 추가 정보를 제공합니까?

그러나 어노테이션 만 사용하면 메소드가 폐기 된 이유를 말할 수 없습니다. JavaDoc으로 만 가능하며 왜 나쁜지 지정하지 않고 메소드를 폐기 할 수 있습니다.

그래서 그들 중 하나만 사용할 수 있습니까? 아니면 둘 다 지정하는 법을 배워야합니까?


4
다른 프로그래머가 당신의 소스를 가지고 있지 않다면? 그는 당신의 방법이 더 이상 사용되지 않는다는 것을 알지 못할 것입니다. 나는 주석 @Deprecated를 사용한다고 말할 것입니다
Eduard

1
@ t-edd : 다른 프로그래머가 소스 나 javadocs (주석도 표시)를 가지고 있지 않은 경우, 우연히 사용되지 않는 API를 사용하는 것이이 문제 중 가장 적습니다.
Michael Borgwardt

1
@ Michael Borgwardt 나는 그것이 어떤 문제를 가져올 수 있는지에 대해 자세히 설명하려고 노력했습니다. 그리고 이것은 제가 생각해 낼 수있는 유일한 것입니다. 때로는 소스와 javadoc 다운로드를 생략하고 다음 버전에는 없을 예정인 비추천 API를 사용할 수 있습니다.
Eduard

답변:


76

둘 다 사용해야합니다. Annotation을 사용하면 컴파일러가 더 이상 사용되지 않는 메소드가 사용될 때마다 경고를 표시 할 수 있으며 javadoc은 그 이유를 설명합니다. 둘 다 중요합니다.

Oracle의 Java Annotations 튜토리얼에 따라 :

요소가 더 이상 사용되지 않는 경우 Javadoc @deprecated 태그를 사용하여 문서화해야합니다.


5
그러나 Oracle 컴파일러는 javadoc 태그에 대한 경고도 표시하므로 주석이 실제로 필요하지 않습니다.
Michael Borgwardt

@Michael는 - 많은 경우 (전부는 아니지만 내가 상상하는 것)에서, 이것은 제어 할 수 있습니다@SuppressWarnings("deprecation")
luis.espinal

3
@MichaelBorgwardt 나는 당신의 생각을 이해합니다. 그러나 너무 많은 것은 결국 "어쨌든 문서를 작성하지 마십시오. 소스 코드 만 신뢰할 수 있기 때문입니다". 예를 들어, javadoc 주석은 사용자에게 "대신이 대체를 사용"하도록 지시 할 수있는 유일한 위치입니다.
Edwin Buck

3
아멘 에드윈. 하지만 2 개의 표기법이 필요하다는 사실은 짜증납니다.
ggb667 2013 년

@MichaelBorgwardt JDK 9 이후 javac는 Javadoc 태그가 주석없이 사용되는 경우 불평합니다. 다른 컴파일러가 주석을 확인할 수 있기 때문에 의미가 있습니다.
Martin

37

로부터 말의 입 :

참고 : Java 언어 사양에서는 @Deprecated 주석으로 표시된 클래스, 메서드 또는 필드를 사용할 때 컴파일러가 경고를 발행하도록 요구합니다. Java 언어 사양에서는 @deprecated Javadoc 태그로 표시된 클래스, 메소드 또는 필드에 액세스 할 때 경고를 발행하기 위해 컴파일러가 필요하지 않지만 현재 Sun 컴파일러는 그렇게합니다.

따라서 기본적으로 컴파일러 경고가 있음을 보장하려면 주석을 사용해야합니다. 그리고 일부 API 디자이너의 놀라운 무능 때문에 설명을 제공하기 위해 javadoc 태그도 지정해야합니다.

개인적으로 주석은 쓸모가 없으며 수정 될 때까지 생략해야한다고 말하고 싶습니다. 좋은 컴파일러 나 IDE는 javadoc 태그와 함께 경고를 표시하기 때문입니다.


3
"좋은 컴파일러 나 IDE는 javadoc 태그와 함께 경고를 표시하기 때문입니다." 그리고 괜찮은 프로그래머는 더 이상 사용되지 않는 내용을 알리기 위해 컴파일러에 의존하지 않고 새롭거나 변경된 API에 대한 문서를 찾을 것입니다.
jwenting

12
@jwenting, 문서를 찾는 것은 인간의 시간 낭비입니다. 기계가 뭔가 놀라운 일이 일어나고 있는지 알아 내고 그것에 대해 알려줍니다. 그게 그들의 직업입니다.
thejoshwolfe

2
@jwenting 동의하지 않습니다. 주석과 javadocs는 프로그래머가 API에 대해 "알 수있는"방법입니다. 유효한 문서 형식입니다. 가능할 때마다 프로그래머는 자신의 지능을 사용하여 흥미로운 일에 대해 생각해야합니다. 누가 어디를 알고 있는지 문서를 찾아 내지 말아야합니다.
Andres F.

3
@jwenting : 좋습니다.하지만 특정 API가 더 이상 사용되지 않는다는 사실이 기본 사항의 일부입니까? 그리고 "프로그래머의 의도를 예측할 수있는"코드 본문에서 사용되지 않는 API의 사용을 나타내는 컴파일러 경고는 어떻게됩니까?
Michael Borgwardt

8
@Deprecated 주석이 지원 중단이 발생한 이유에 대한 설명을 받아 들일 수있는 'value'문자열을 지원할 수 있다면 가장 좋은 방법이라고 생각합니다. 설명은 주석 자체 대신 javadoc 방식을 사용하는 유일한 이유 인 것 같습니다.
jrharshath 2013 년

6

둘 다 작성해야합니다. @Deprecated Anotation은 컴파일러 용이고 @deprecated JavaDoc 태그는 왜 이것이 더 이상 사용되지 않는지 확인하려는 사람을위한 것입니다.

예는 다음과 같습니다.

/**
* @deprecated We dont need this Method because ...
*/
@Deprecated
public void doStuff(){..}

2
컴파일러의 경우? 컴파일러는 개발자에게 경고를 보내는 것 외에는 신경 쓰지 않으므로 둘 다 개발자를위한 것입니다. 주석은 그 자체로는 거의 쓸모가 없지만 javadoc 주석은 사용이 보장되지 않습니다. 그래서 썬 / 오라클 (누구의 시계가 켜져 있는지 모르겠습니다)은 개발자가 하나가 충분해야하는 상황을 적절하게 문서화하기 위해 두 가지 다른 작업을 수행해야하는 상황을 설정했습니다.
nasch 2015

이 두 답변은 모두 정확합니다. 둘 다 사용해야하지만 하나만 사용해야합니다.
thonnor jul.

5

둘 다 지정해야합니다.

주석을 통해 컴파일러는 이에 대해 알 수 있으며 메서드가 사용될 때 경고를 트리거합니다. JavaDoc 속성은 개발자가 사용을 시작하기 전에 알 수 있습니다.

이것들은 매우 다른 두 가지입니다!


6
이것들은 전혀 다른 것이 아닙니다. 주석이 설명을 매개 변수로 허용하면 개발자에게도 표시 될 수 있습니다.
Michael Borgwardt

@Michael 귀하의 답변은 그들 사이의 차이점을 강조합니다. 사실 그것은 저와 같은 아이디어로 발전합니다.
Dunaril

5
아니요, 내 대답은 주석이 잘못 설계 되었기 때문에 javadoc 태그가 여전히 필요하다는 것을 강조합니다. 주석은 메서드 시그널과 마찬가지로 개발자를위한 코드 메타 데이터 및 정보입니다.
Michael Borgwardt

2
태그 2 개가 필요한 것은 어리석은 일입니다. 주석은 문서가 없으면 쓸모가 없기 때문에 존재해서는 안됩니다. 사실 지금은이 특정 항목이 사용되지 않는 것으로 표시되는 이유가 궁금합니다. @Deprecated javadoc 태그가 없으므로 전혀 모릅니다. 이건 짜증나. 누군가가 "사용하지 마십시오"라고 말했지만 그 이유는 아니기 때문에 아무것도없는 것보다 거의 나쁩니다. 목을 조르는 촉구.
ggb667 2013 년

1

이것은 좋은 IDE로 쉽게 처리 할 수 ​​있습니다.

예를 들어 Eclipse Neon. 메서드 또는 필드에서 @deprecated javadoc을 만들 때 자동으로 @Deprecated 주석을 추가합니다.

따라서 적절한 설명과 함께 javadoc을 작성하고 파일을 저장하는 순간 IDE가 @Deprecated 주석을 추가하도록합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.