티스토리 뷰
#어노테이션
컴파일 시 에러를 발생시키거나 경고해주는 목적.
소스 코드에 메타데이터를 표현하는 목적.
* 만들어져있는 어노테이션
@Override - 메소드가 오버라이드 됐는지 검증.부모 클래스 또는 구현해야할 인터페이스에서 해당 메소드를 찾을 수 없다면 컴파일 오류.
@Deprecated - 메소드를 사용하지 말도록 유도. 만약 사용한다면 컴파일 경고.
@SuppressWarnings - 컴파일 경고를 무시.
@SafeVarargs - 제너릭 같은 가변인자 매개변수를 사용할 때 경고를 무시.(자바7 이상)
@FunctionalInterface - 람다 함수등을 위한 인터페이스를 지정. 메소드가 없거나 두개 이상 되면 컴파일 오류.(자바 8이상)
* 메타 어노테이션(Meta Annotation)
이 메타 어노테이션을 이용해 커스텀 어노테이션을 만들수 있다.
@Target - 어노테이션이 적용할 위치를 결정
ElementType.PACKAGE, // 패키지 선언시
ElementType.TYPE, // 타입(클래스,인터페이스,enum) 선언시
ElementType.CONSTRUCTOR, // 생성자 선언시
ElementType.FIELD, // 멤버 변수 선언시
ElementType.METHOD, // 메소드 선언시
ElementType.ANNOTATION_TYPE, // 어노테이션 타입 선언시
ElementType.LOCAL_VARIABLE, // 지역 변수 선언시
ElementType.PARAMETER, // 매개 변수 선언시
ElementType.TYPE_PARAMETER, // 매개 변수 타입 선언시
ElementType.TYPE_USE // 타입 사용시
@Retention - 어노테이션의 범위(?). 어떤 시점까지 어노테이션이 영향을 미치는지 결정
RetentionPolicy.SOURCE --> 어노테이션 정보는 컴파일 이후 없어짐
RetentionPolicy.CALSS --> 컴파일러가 클래스를 참조할 때까지 유효
RetentionPolicy.RUNTIME --> 컴파일 이후에도 JVM에 의해서 참조가 가능
@Documented - 문서에도 어노테이션의 정보가 표현
@Inherited - 이 어노테이션을 선언하면 부모클래스에서 어노테이션을 상속 받을 수 있다.
@Repeatable - 반복적으로 어노테이션을 선언할 수 있게 한다.
* 어노테이션에는 메타데이터 저장을 위해 클래스처럼 메서드를 가질 수 있다~
~~ 자 이제 어노테이션 내맘대로 만들어보자(커스텀 어노테이션) ~~
ex) 천천히봐라 다안다.
import java.lang.annotation.*;
import java.lang.reflect.*;
//자 어노테이션 만든다
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface A{
int a() default 200; //어노테이션의 메서드(만들어준거다)
String[] b() default {"ab"}; //어노테이션의 메서드(만들어준거다)
}
// 어노테이션 A만들었다
class B{
@A // A만들때 Target이 METHOD니까 메서드위에 선언한다.
void b(){
System.out.println("aaa");
}
@A(a=300,b={"cd","ef"}) //어노테이션 A의 메서드 값 변경~해서 메서드위에 선언.
void c(){
System.out.println("bbb");
}
}
//자 이제 호출해보자
class C{
public static void main(String args[]) throws Exception{
Class<B> bObj=B.class;
Method m1=bObj.getDeclaredMethod("b");
Method m2=bObj.getDeclaredMethod("c");
A o1=m1.getAnnotation(A.class);
A o2=m2.getAnnotation(A.class);
System.out.println(o1.a());
System.out.println(o1.b()[0]);
System.out.println(o2.a());
String[] array=o2.b();
System.out.println(array[0]);
System.out.println(array[1]);
}
}
}
~~ 자 이제 만들어져있는 것도 써보자 ~~
ex)
import java.util.*;
class A{
public static void main(String args[]){
Date d=new Date();
int y=d.getYear(); // Date클래스의 getYear는 Calendar클래스가 나오면서 구식이라서 잘안쓰도록 권장됨
// 그래서 컴파일하면 오류는 안나지면 경고가 뜬다 내가 쓴다는데 감히??
}
}
import java.util.*;
class A{
public static void main(String args[]){
Date d=new Date();
@SuppressWarnings({"deprecation"}) // 그래서 경고 무시시키는 어노테이션 사용~
int y=d.getYear();
}
}
'VIEW > JSP&SERVLET' 카테고리의 다른 글
[JSP] 파일 업로드,답변형 게시판 (0) | 2017.12.01 |
---|---|
[JSP] sitemesh (0) | 2017.12.01 |
[JSP] 국제화태그,필터 (0) | 2017.12.01 |
[JSP] JSTL (0) | 2017.12.01 |
[JSP] <jsp:useBean>,Cookie,EL (0) | 2017.12.01 |