본문 바로가기
Language/java

[Java] 애너테이션_애너테이션 타입 정의하기

by gamxong 2022. 8. 2.
@interface 애너테이션이름 {
	타입 요소이름();  // 에너테이션의 요소를 선언한다.
    ...
}

@Override는 '애너테이션', Override는 '애너테이션의 타입'

 

 

애너테이션의 요소

: 애너테이션 내에 선언된 메서드를 '애너테이션의 요소'라고 한다. 아래 다섯 개의 요소를 갖는다.

@inerface TestInfo {
    int count();
    String testedBy();
    String[] testTools();
    TestType testType();
    DateTime testDate();
}

@interface DateTime {
    String yymmdd();
    String hhmmss();
}

- 애너테이션의 각 요소는 기본값을 가질 수 있으며, 기본값이 있는 요소는 애너테이션을 적용할 때 값을 지정하지 않으면 기본값이 사용됨.

 

 

 

java.lang.annotation.Annotation

 

: 모든 애너테이션의 조상은 Annotation이다. 그러나 애너테이션은 상속이 허용되지 않으므로 조상을 지정할 수 없다.

@interface TestInfo extends Annotation { // 에러
    int count();
    String testedBy();
    ...
}

 

package java.lang.annotation;

public interface Annotation {  // Annotation자신은 인터페이스이다.
    boolean equals(Object obj);
    int hashCode();
    String toString();
    
    Class<? extends Annotation> annotationType();  // 애너테이션의 타입을 반환
}

▶ 모든 애너테이션의 객체에 대해 equals(), hashCode(), toString()과 같은 메서드를 호출하는 것이 가능

 

 

마커 애너테이션 Marker Annotation

 

: 값을 지정할 필요가 없는 경우, 애너테이션의 요소를 하나도 정의하지 않을 수 있다.

: 요소가 하나도 정의되지 않은 애너테이션을 마커 애너테이션이라고 한다.

 

 

 

애너테이션 요소의 규칙

 

- 요소의 타입은 기본형, String, enum, 애너테이션, Class만 허용됨

- ()안에 매개변수를 선언할 수 없다.

- 예외를 선언할 수 없다.

- 요소를 타입 매개변수로 정의할 수 없다.

 

 

 

댓글