주석의 주요 이점은 이미 JDK에 있는 표준 주석을 사용하는 데서 오는 것이 아닙니다. 동시에 고유한 주석을 만들 필요가 거의 없습니다. 그러나 우리가 대규모 시스템을 개발하거나 별도의 라이브러리를 만드는 경우 아키텍처 수준에서 자체 주석을 구현하면 확실히 배당금을 얻을 수 있습니다.

주석을 만들어 보겠습니다.

이렇게 하려면 파일을 생성하되 class 또는 interface 를 작성하는 대신 @interface 를 작성하십시오 . 이것은 주석을 위한 파일이 될 것입니다. 주석의 내부 구조는 인터페이스의 내부 구조와 유사합니다.

public @interface Sum {
   int sum() default 0;
}

@interface는 이것이 주석임을 나타내고
default 는 매개변수가 특정 기본값을 가질 것임을 나타냅니다.

짜잔! 우리는 주석을 만들었습니다! 이론적으로는 이미 사용할 수 있지만 먼저 구성하는 것이 좋습니다.

구성이 없으면 주석을 모든 항목(클래스, 메서드, 특성 등)에 적용할 수 있으므로 이 시점에서 주석을 사용하는 것은 거의 의미가 없습니다. 이상하게 들릴지 모르지만 우리의 주석은 다른 주석으로 주석을 달아야 합니다!

@Target 부터 시작하겠습니다 .

@Target 주석 (Java 1.5 이후 관련)은 주석을 적용하는 기능을 제한합니다. 사용을 특정 수준으로 제한하려면 적용할 수 있는 유형을 나타내는 @Target 주석 에 인수를 전달해야 합니다 . 일반적으로 사용되는 몇 가지 유형은 다음과 같습니다.

@Target(요소 유형.패키지) 패키지
@대상(요소 유형.유형) 수업을 위해
@Target(ElementType.CONSTRUCTOR) 생성자
@Target(요소 유형.메소드) 방법에 대한
@Target(요소 유형.FIELD) 클래스의 속성(변수)
@Target(ElementType.PARAMATER) 메소드 매개변수의 경우
@Target(ElementType.LOCAL_VARIABLE) 지역 변수

여러 유형에 대한 주석이 필요한 경우 여러 인수를 배열로 전달할 수 있습니다.

@Target({ ElementType.PARAMETER, ElementType.LOCAL_VARIABLE })

구성에서 다음으로 중요한 부분은 @Retention 주석입니다.

이 주석은 주석을 사용할 수 있는 코드 수명 주기의 일부를 나타냅니다.

RetentionPolicy.SOURCE SOURCE 보존 정책 으로 표시된 주석은 런타임 시 삭제됩니다.
RetentionPolicy.CLASS CLASS 보존 정책 으로 표시된 주석은 .class 파일 에 기록되지만 런타임 시 제거됩니다.
RetentionPolicy.RUNTIME RUNTIME 보존 정책 으로 표시된 주석은 런타임에 지속되며 런타임에 프로그램에서 액세스할 수 있습니다.

구성에 사용할 수 있는 주석이 몇 가지 더 있습니다.

주석
@상속 파생 클래스가 부모 클래스의 주석 구현을 상속함을 나타냅니다.
@문서화됨 이는 주석이 생성된 Javadoc 문서에 포함됨을 나타냅니다.

이제 나만의 주석을 만들어 보겠습니다.

클래스 및 메서드에 대한 주석을 만들고 코드 작성자 및 버전에 대한 정보를 포함합니다.

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Info {
   String author() default "Author";
   String version() default "0.0";
}

메서드와 클래스에 주석을 적용할 수 있습니다. 주석의 메타데이터는 런타임에 사용할 수 있습니다. 주석의 매개변수에 주의하십시오. 두 개의 인수(작성자와 버전)를 제공하거나 생략할 수 있습니다. 생략하면 지정된 기본값( 기본 "저자"기본 "0.0" )이 사용됩니다.

매개변수에 기본값을 지정할 필요가 없다는 점은 주목할 가치가 있습니다. 이 경우 매개변수는 필수가 됩니다.

인수를 전달할 때 value = "value" 표기법을 사용하여 해당 매개변수를 지정해야 합니다 . 주석에 단일 매개변수가 있더라도 매개변수는 항상 명시적으로 이름을 지정해야 합니다.

주석을 몇 가지 클래스에 적용해 보겠습니다.

@Info
public class MyClass1 {
   @Info
   public void myClassMethod() {}
}

@Info(version = "2.0")
public class MyClass2 {
   @Info(author = "Anonymous")
   public void myClassMethod() {}
}

@Info(author = "Anonymous", version = "2.0")
public class MyClass3 {
   @Info(author = "Anonymous", version = "4.0")
   public void myClassMethod() {}
}