Java 주석의 / ** 및 / *


192

차이점은 무엇입니까

/**
 * comment
 *
 *
 */

/*
 * 
 * comment
 *
 */

자바? 언제 사용해야합니까?

답변:


243

첫 번째 형태는 Javadoc 입니다. javadoc도구에서 생성 된 코드에 대한 공식 API를 작성할 때이 기능을 사용합니다 . 예를 들어, Java 7 API 페이지 는 Javadoc을 사용하며 해당 도구에 의해 생성되었습니다.

Javadoc에서 볼 수있는 몇 가지 일반적인 요소는 다음과 같습니다.

  • @param: 이것은 메소드에 전달되는 매개 변수와 예상되는 값을 나타내는 데 사용됩니다.

  • @return: 메소드가 어떤 결과를 돌려 줄지 나타내는 데 사용됩니다.

  • @throws: 특정 입력의 경우 메소드에서 예외 또는 오류가 발생 함을 표시하는 데 사용됩니다.

  • @since:이 클래스 또는 함수가 사용 가능한 가장 초기 Java 버전을 나타내는 데 사용됩니다.

예를 들어 다음과 같은 compare방법에 대한 Javadoc 이 있습니다 Integer.

/**
 * Compares two {@code int} values numerically.
 * The value returned is identical to what would be returned by:
 * <pre>
 *    Integer.valueOf(x).compareTo(Integer.valueOf(y))
 * </pre>
 *
 * @param  x the first {@code int} to compare
 * @param  y the second {@code int} to compare
 * @return the value {@code 0} if {@code x == y};
 *         a value less than {@code 0} if {@code x < y}; and
 *         a value greater than {@code 0} if {@code x > y}
 * @since 1.7
 */
public static int compare(int x, int y) {
    return (x < y) ? -1 : ((x == y) ? 0 : 1);
}

두 번째 형식은 블록 (여러 줄) 주석입니다. 주석에 여러 줄을 추가하려는 경우이를 사용합니다.

나는 당신이 후자의 형태를 조금만 사용하고 싶다고 말할 것이다 . 즉, 메소드 / 복합 함수의 동작을 설명하지 않는 블록 주석으로 코드를 과도하게 사용하고 싶지 않습니다.

Javadoc은이 두 가지를 더 잘 설명하고이를 사용하여 실제 문서를 생성 할 수 있으므로 간단한 블록 주석보다 Javadoc을 사용하는 것이 더 바람직합니다.


35
간단한 블록 주석 대신 Javadoc을 사용하면 얻을 수있는 또 다른 장점은 Java 요소 (f.ex. 메소드 서명, 필드 선언, 클래스 등) 앞에 Javadoc 주석을 넣을 때 IDE를 사용할 수 있다는 것입니다. -해당 Java 요소에 대한 참조에서 커서를 움직이거나 마우스로 가리키면 설명 (도구 설명에 f.ex.)이 표시됩니다.
SantiBailors

변수에 자바 문서 주석을 사용해도 괜찮습니까?
the_prole

@ the_prole : 당신은 할 수 있지만 Constants 종류의 패키지가 아닌 한 많은 가치를 보지 못합니다. 그럼에도 불구하고 인라인 의견은 내 경험에서 더 중요했습니다.
Makoto

136

Java 프로그래밍 언어의 경우 두 언어 간에 차이없습니다 . Java에는 전통적인 주석 ( /* ... */)과 줄 끝 주석 ( ) 이라는 두 가지 유형의 주석이 // ...있습니다. Java 언어 사양을 참조하십시오 . 그래서, 자바 프로그래밍 언어, 모두 /* ... */와는 /** ... */즉, 기존의 코멘트 인스턴스이며, 그들은 모두 자바 컴파일러에 의해 정확히 동일하게 취급되어 무시됩니다 (: 그들은 공백으로 처리됩니다 이상 올바르게).

그러나 Java 프로그래머는 Java 컴파일러만을 사용하지 않습니다. 컴파일러, IDE, 빌드 시스템 등을 포함한 전체 툴 체인을 사용합니다. 이러한 툴 중 일부는 Java 컴파일러와 다르게 해석합니다. 특히 /** ... */주석은 Java 플랫폼에 포함되어 있고 문서를 생성 하는 Javadoc 도구로 해석됩니다 . Javadoc 도구는 Java 소스 파일을 스캔하고 그 사이의 부분 /** ... */을 문서로 해석합니다 .

이것은 like FIXME와 같은 태그와 유사합니다 TODO. // TODO: fix thisor 와 같은 주석을 포함하면 // FIXME: do that대부분의 IDE는 그러한 주석을 강조 표시하여 잊지 않도록합니다. 그러나 Java의 경우 주석 일뿐입니다.


48
Javadoc 구문이 언어의 일부가 아니라는 다른 중요한 답변은 없습니다.
Chris Hayes

1
그렇기 때문에 Maven에서 제대로 컴파일되는 프로젝트를 가질 수는 있지만 JavaDocs를 연결하자마자 javadoc도구가 무언가를 해석 할 수 없기 때문에 불평하기 시작합니다 .
Captain Man

19

첫 번째는 Javadoc 주석입니다. javadoc도구로 처리 하여 클래스에 대한 API 문서를 생성 할 수 있습니다. 두 번째는 일반적인 블록 주석입니다.


14

JLS 3.7 섹션을 읽으면 Java 주석에 대해 알아야 할 모든 내용이 잘 설명되어 있습니다.

두 가지 종류의 주석이 있습니다.

  • / * 텍스트 * /

일반적인 주석 : ASCII 문자 / *에서 ASCII 문자 * /까지의 모든 텍스트는 무시됩니다 (C 및 C ++에서와 같이).

  • //본문

줄 끝 주석 : // ASCII 문자에서 줄 끝까지의 모든 텍스트는 무시됩니다 (C ++에서와 같이).


질문에 대해

첫번째

/**
 *
 */

Javadoc Technology 선언에 사용됩니다 .

Javadoc은 소스 파일 세트에서 선언 및 문서 주석을 구문 분석하고 클래스, 인터페이스, 생성자, 메소드 및 필드를 설명하는 HTML 페이지 세트를 생성하는 도구입니다. Javadoc Doclet을 사용하여 Javadoc 출력을 사용자 정의 할 수 있습니다. Doclet은 Doclet API로 작성된 프로그램으로, 도구가 생성 할 출력의 내용과 형식을 지정합니다. Doclet을 작성하여 HTML, SGML, XML, RTF 및 MIF와 같은 모든 종류의 텍스트 파일 출력을 생성 할 수 있습니다. Oracle은 HTML 형식 API 문서를 생성하기위한 표준 Doclet을 제공합니다. Doclet을 사용하여 API 문서 작성과 관련이없는 특수 작업을 수행 할 수도 있습니다.

자세한 내용 DocletAPI 를 참조하십시오 .

사이에 두 번째는, 같은 JLS 명확하게 설명, 모든 텍스트를 무시 /*하고 */여러 의견을 작성하는 데 사용됩니다 따라서.


Java의 주석에 대해 알고 싶은 다른 것들

  • 주석이 중첩되지 않습니다.
  • /* and */로 시작하는 주석에는 특별한 의미가 없습니다 //.
  • //로 시작하는 주석에는 특별한 의미가 없습니다 /* or /**.
  • 어휘 문법은 주석이 문자 리터럴 ( §3.10.4 ) 또는 문자열 리터럴 ( §3.10.5 ) 내에서 발생하지 않음을 의미합니다 .

따라서 다음 텍스트는 완전한 단일 주석입니다.

/* this comment /* // /** ends here: */

8

기존 답변이 문제 의이 부분을 적절하게 해결했다고 생각하지 않습니다.

언제 사용해야합니까?

조직 내에서 게시되거나 재사용 될 API를 작성하는 경우 모든 public클래스, 메소드 및 필드뿐만 아니라 protectedfinal클래스 의 메소드 및 필드에 대한 포괄적 인 Javadoc 주석을 작성해야합니다 . Javadoc은 전제 조건, 사후 조건, 유효한 인수, 런타임 예외, 내부 호출 등과 같이 메소드 서명으로 전달할 수없는 모든 것을 포함해야합니다 .

내부 API (동일한 프로그램의 다른 부분에서 사용되는 API)를 작성하는 경우 Javadoc은 덜 중요합니다. 그러나 유지 보수 프로그래머의 이익을 위해 올바른 사용법이나 의미가 즉시 명확하지 않은 모든 메소드 또는 필드에 대해 Javadoc을 작성해야합니다.

Javadoc의 "킬러 기능"은 Eclipse 및 기타 IDE와 밀접하게 통합되어 있다는 것입니다. 개발자는 식별자 위에 마우스 포인터를 올려 놓아야 알 수있는 모든 것을 배울 수 있습니다. 경험이 풍부한 Java 개발자에게는 문서를 지속적으로 참조하는 것이 제 2의 특성이되어 자체 코드의 품질을 향상시킵니다. API가 Javadoc과 함께 문서화되지 않은 경우 숙련 된 개발자는 사용하지 않을 것입니다.


4

다음 Java 코드 목록의 주석은 회색으로 표시됩니다.

/** 
 * The HelloWorldApp class implements an application that
 * simply displays "Hello World!" to the standard output.
 */
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); //Display the string.
    }
}

Java 언어는 세 가지 종류의 주석을 지원합니다.

/* text */

컴파일러는에서 /*까지 모든 것을 무시 합니다 */.

/** documentation */

이것은 문서 주석 (문서 주석)을 나타냅니다. 컴파일러는 /*and 를 사용하는 주석을 무시하는 것처럼 이러한 종류의 주석을 무시합니다 */. JDK javadoc 도구는 자동 생성 된 문서를 준비 할 때 문서 주석을 사용합니다.

// text

컴파일러는 //줄 끝까지 모든 것을 무시합니다 .

이제 언제 사용해야하는지에 대해 :

// text한 줄의 코드에 주석을 달고 싶을 때 사용하십시오 .

/* text */여러 줄의 코드에 주석을 달고 싶을 때 사용하십시오 .

/** documentation */ 프로그램 문서 자동 생성에 사용할 수있는 프로그램에 대한 정보를 추가하려는 경우에 사용하십시오 .


3

첫 번째는 클래스, 인터페이스, 메소드 등에서 정의한 Javadoc을위한 것입니다. Javadoc을 이름 제안으로 사용하여 클래스의 역할 또는 메소드가 수행하는 작업에 대한 코드를 문서화하고 보고서를 생성 할 수 있습니다.

두 번째는 코드 블록 주석입니다. 예를 들어 컴파일러가 해석하기를 원하지 않는 코드 블록이 있다고 가정하면 코드 블록 주석을 사용합니다.

다른 하나는 // 당신이 진행하는 코드 라인이 무엇을할지 지정하기 위해 문장 레벨에서 사용하는 것입니다.

// TODO와 같은 다른 것들도 있습니다. 이것은 나중에 그 장소에서 무언가를하고 싶다고 표시합니다.

// FIXME 임시 솔루션이 있지만 나중에 방문하여 더 나아질 때 사용할 수 있습니다.

도움이 되었기를 바랍니다


0
  • 단일 주석 예 : // comment
  • 여러 줄 주석 예 : / * comment * /
  • javadoc 주석 예 : / ** comment * /

4
이것은 기존 답변 위에 아무것도 추가하지 않습니다.
shmosel

1
@shmosel 아니오, 그것들을 요약합니다.
Det

-2

Java는 두 가지 유형의 주석을 지원합니다.

  • /* multiline comment */: 컴파일러는에서 모든 것을 무시 /*합니다 */. 주석은 여러 줄에 걸쳐있을 수 있습니다.

  • // single line: 컴파일러는 //줄 끝 에서 모든 것을 무시합니다 .

javadoc 과 같은 일부 도구 는 목적에 따라 특별한 여러 줄 주석을 사용합니다. 예를 들어 /** doc comment */, 자동 생성 된 문서를 준비 할 때 javadoc에서 사용하는 문서 주석이지만 Java의 경우 간단한 여러 줄 주석입니다.


12
Java 언어는 두 가지 유형의 주석 만 지원합니다. 형식의 주석은 /** .. */단순한 여러 줄 주석이며 그 안의 첫 문자는 별표입니다.
Chris Hayes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.