어노테이션은 실행문은 아니지만, 정보를 제공하도록 하는 표시이다.
- 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공한다.
- 빌드 실행 혹은 배치 시 정보를 제공한다.
- 실행 시 특정 기능을 실행하도록 정보를 제공한다.
메소드를 오버라이드 했을 때 하는 표시이다.
Example :
@Override public String toString(){ 실행문 }
지금은 사용하고 있지만, 추후에 없어지거나 바뀔 내용에다가 표시하는 어노테이션이다. 어노테이션 선언 시 메소드 이름에 선이 그어진다.
Example :
객체가 변수를 선언하고 사용안할 때, 객체를 생성하고 Serial번호를 생성 안했을 때, 혹은 List를 선언해놓고 타입지정을 안했을 때처럼 경고 에러가 생기는 것을 막아주는 어노테이션이다.
Example :
@SuppressWarning("rawtype") public void setMessageList(){ List list = new ArrayList(); }
인터페이스에 선언이 되는 어노테이션이지만, 특히 메소드 하나만을 가지고 있는 인터페이스에 선언된다. 메소드가 두개인 인터페이스에 선언되면 에러가 표시된다.
코드를 작성한 사람이 이 메서드는 타입 안정성을 보장한다는 뜻으로 달아두는 어노테이션이다.
주로 제네릭스(Generics)를 사용하는 곳에서 많이 쓰이는 편이다. 제네릭스는 어떤 타입이 들어올지 모르기 때문에 @SafeVarags를 적용하면 타입 안정성이 있다는 뜻으로 타입 안정성이 보장되지 않은 unchecked cast는 경고 메시지가 나오지 않는다. 하지만 varargs 경고 메시지는 억제할 수 없기 때문에 @SafeVarargs를 사용한다면 @SuppessWarning("varargs")도 같이 사용해야 한다.
말그대로 사용자가 임의로 만드는 어노테이션이다. @interface를 이용하여 어노테이션을 생성할 수 있다.
Example :
public @interface Check{ String value(); int num() default 1; } @Check("first") @Check(value="second",num=5)
어노테이션을 만들고 이 어노테이션을 어디에 쓸지 지정하는 어노테이션이다.
Example :
@Target({ElementType.TYPE, ElementType.METHOD}) public @interface Check{ }
Check 어노테이션은 클래스(TYPE)앞이랑 메소드(METHOD)앞에서만 사용가능하도록 @Target으로 지정해놓는다.
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Check{ }
getConstructors( ) : 클래스가 갖고있는 모든 생성자를 리턴함
return : Constructor[ ]
getDeclaredMethods( ) : 클래스가 갖고있는 모든 메소드를 리턴함
return : Method[ ]
isAnnotationPresent(Class<? extends Annotation> a)
: 인자의 어노테이션이 적용되었는지 여부를 판단하는 메소드
return : booleangetAnnotation(Class a)
: 인자의 어노테이션을 리턴, 없다면 null 리턴
return : AnnotationgetAnnotations( )
: 적용한 모든 어노테이션을 리턴
return : Annotation[ ]