@Test //이 메소드가 테스트 대상임을 테스트 프로그램에게 말한다.
public void method() {
...
}
@Override
void method(){}
class Child{
@Deprecated
void pre(){
System.out.println(1);
}
}
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
public class tryja {
@Deprecated
public static void main(String[] args) {
Child c = new Child();
c.pre();
}
}
class Child{
@Deprecated
void pre(){
System.out.println(1);
}
}
애너테이션의 적용 범위는 @Target 애너테이션으로 정할 수 있다. 다음 표의 값들은 열거형으로 ”java.lang.annotation.ElementType”에 정의되어 있다
import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
//import문을 이용하여 ElementType.TYPE 대신 TYPE과 같이 간단히 작성할 수 있습니다.
@Target({FIELD, TYPE, TYPE_USE}) // 적용대상이 FIELD, TYPE
public @interface CustomAnnotation { } // CustomAnnotation을 정의
//에너테이션 만들고
____________________________________________________________________
//Main클래스에서 사용
@CustomAnnotation // 적용대상이 TYPE인 경우
class Main {
@CustomAnnotation // 적용대상이 FIELD인 경우
int i;
}
애너테이션이 유지(retention)되는 기간을 지정하는데 사용
//실제 만들어져있는 애너테이션 분석
// 컴파일러에 의해 사용되는 애너테잇션의 유지 정책은 SOURCE이다.
@Target(ElemnetType.METHOD)
@Retention(RetentionPolucy.SOURCE)
public @interface Override {}
________________________________________________________
// 실행시에 사용 가능한 애너테이션의 정책은 RUNTIME이다.
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FunctionalInterface {}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface FuntionalInterface{}
우리가 자주 사용하진 않을것이다.
@interface [annotation_name] {}
에너테이션의 메서드는 추상 메서드, 에너테이션 적용 시 지정(순서x)
에너테이션 요소 : 적용 시 값지정 안하면 사용가능한 기본값 지정가능, 단일 요소이고 이름이 value이면 요소이름 생략가능
요소 타입이 배열이면 {}사용
모든 에너테이션의 조상 : public interface Annotation
마커 에너테이션(Marker Annotation) : 요소가 하나도 x
요소 타입은 기본형, String, enum, 에너테이션, Class만 선언
괄호()안 매개변수 선언x
예외 선언 x
요소를 타입 매개변수로 정의 x
표준 애너테이션을 잘 기억하자