Java 애터네이션 타입 정의하기, 애너테이션 요소
by 볼빵빵오춘기애너테이션 타입 정의하기
애너테이션을 직접 만들어 쓸 수 있다
정의 방법
@interface 애너테이션이름
✨ 애너테이션의 메서드는 추상 메서드이며, 애너테이션을 적용할 때 지정한다.(순서 상관x)
애너테이션의 요소
- 적용시 값을 지정하지 않으면, 사용될 수 있는 기본값 지정 가능하다.(null 제외)
- 요소가 하나이고 이름이 value일 때는 요소의 이름 생략 가능하다.
- 요소의 타입이 배열인 경우, 괄호{}를 사용해야 한다.
더보기
⇒ 하나일 때는 괄호 생략가능, 여러 개일때나 값이 없을때는 괄호사용
모든 애너테이션의 조상
- java.lang.annotation.Annotation
- Annotation은 모든 애너테이션의 조상이지만 상속은 불가능하다.
- Annotation은 인터페이스다.
마커 애너테이션(Marker Annotation)
요소가 하나도 정의되지 않은 애너테이션이다.
애너테이션 요소의 규칙
- 요소의 타입은 기본형, String, enum, 애너테이션, Class(설계도 객체)만 허용된다.
- (추상메소드)괄호()안에 매개변수를 선언할 수 없다.
- 예외를 선언할 수 없다.
- 요소를 타입 매개변수로 정의할 수 없다.
문제
더보기
⇒ 마지막은 타입
예제 코드
import java.util.*;
import java.lang.annotation.*;
@Deprecated
@SuppressWarnings("1111") // 유효하지 않은 애너테이션은 무시된다.
@TestInfo(testedBy="aaa", testDate=@DateTime(yymmdd="160101",hhmmss="235959"))
public class Try {
public static void main(String[] args) {
// Ex12_8의 Class객체를 얻는다.
Class<Try> cls = Try.class;
TestInfo anno = cls.getAnnotation(TestInfo.class);
System.out.println("anno.testedBy()="+anno.testedBy());
System.out.println("anno.testDate().yymmdd()=" +anno.testDate().yymmdd());
System.out.println("anno.testDate().hhmmss()=" +anno.testDate().hhmmss());
for(String str : anno.testTools())
System.out.println("testTools="+str);
System.out.println();
// Ex12_8에 적용된 모든 애너테이션을 가져온다.
Annotation[] annoArr = cls.getAnnotations();
for(Annotation a : annoArr)
System.out.println(a);
}
}
@Retention(RetentionPolicy.RUNTIME) // 실행 시에 사용가능하도록 지정
@interface TestInfo {
int count() default 1;
String testedBy();
String[] testTools() default "JUnit";
TestType testType() default TestType.FIRST;
DateTime testDate();
}
@Retention(RetentionPolicy.RUNTIME) // 실행 시에 사용가능하도록 지정
@interface DateTime {
String yymmdd();
String hhmmss();
}
enum TestType { FIRST, FINAL }
anno.testedBy()=aaa
anno.testDate().yymmdd()=160101
anno.testDate().hhmmss()=235959
testTools=JUnit
@java.lang.Deprecated(forRemoval=false, since="")
@TestInfo(count=1, testType=FIRST, testTools={"JUnit"}, testedBy="aaa",testDate=@DateTime(yymmdd="160101", hhmmss="235959"))
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java 쓰레드의 구현과 실행 (0) | 2023.12.09 |
---|---|
Java 프로세스, 쓰레드(process & thread) (1) | 2023.12.09 |
Java 메타 애너테이션 (0) | 2023.12.09 |
Java 표준애너테이션 (0) | 2023.12.09 |
Java 애너테이션(Annotation) (1) | 2023.12.09 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기