* - 컴파일러에게 제공하는 특별한 정보
* - 컴파일이나 배포하는 동안 사용할 특별한 정보
* - 실행하는 동안 사용할 특별한 정보
* - 문법
* @애노테이션이름(속성=값,속성=값, ...)
* - 만약 속성 이름이 다음과 같이 'value'일 경우 생략가능
* @애노테이션이름(value="okok")
* ==> @애노테이션이름("okok")
* - 그러나, 속성이 2개 이상일 경우는 value 이름을 생략할 수 없다.
* @애노테이션이름("okok", age="20") // 오류!
* ==> @애노테이션이름(value="okok",age="20") //OK
애노테이션 정의는 인터페이스 정의하는것과 유사하다.
package net.bitacademy.java41.test;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/*
* Annotation
* - 컴파일러에게 제공하는 특별한 정보
* - 컴파일이나 배포하는 동안 사용할 특별한 정보
* - 실행하는 동안 사용할 특별한 정보
* - 문법
* @애노테이션이름(속성=값,속성=값, ...)
* - 만약 속성 이름이 다음과 같이 'value'일 경우 생략가능
* @애노테이션이름(value="okok")
* ==> @애노테이션이름("okok")
* - 그러나, 속성이 2개 이상일 경우는 value 이름을 생략할 수 없다.
* @애노테이션이름("okok", age="20") // 오류!
* ==> @애노테이션이름(value="okok",age="20") //OK
*/
/* 애노테이션 정의
* - 애노테이션 유지 정책: @Retention()
* .SOURCE (.class 파일에 없다. 컴파일 할 때 버려짐)
* .CLASS (.class 파일에 존재, 컴파일러에게 제공할 정보)
* .RUNTIME (.class 파일에 존재, JVM에게 제공할 정보)
*/
@Retention(RetentionPolicy.RUNTIME)
@interface Book {
/* 속성 정의 */
String value();
/* 속성 정의: 기본 값을 갖는 속성 */
int page() default 100;
String language() default "korean";
/* 속성 정의: 배열 */
String[] authors() default {""};
}
@Book("오호라..자바")
class Item {
int no;
int price;
}
@Book(
// "두번째" // 인자값이 두개이상일때는 value이더라도 생략할수 없다.
value="두번째",
page=250,
authors="홍길동" // 배열값을 넣을 때 값이 한개일 경우 {} 생략 가능
)
class Item2 { }
@Book(value="세번째", authors={"홍길동", "임꺽정"})
class Item3 { }
public class AnnotationTest {
public static void main(String[] args) {
Item item = new Item();
item.no = 1;
item.price= 10000;
Class clazz = item.getClass();
Book book = (Book)clazz.getAnnotation(Book.class);
System.out.println(book.value());
// Class.forName("net.bitacademy.java41.test.Item2") == Item2.class
System.out.println("------------------------");
Book book2 = Item2.class.getAnnotation(Book.class);
System.out.println(book2.value());
System.out.println(book2.page());
System.out.println(book2.language());
System.out.println(book2.authors()[0]);
System.out.println("------------------------");
Book book3 = Item3.class.getAnnotation(Book.class);
System.out.println(book3.value());
System.out.println(book3.authors()[0]);
System.out.println(book3.authors()[1]);
}
}
댓글 없음:
댓글 쓰기