자바에서 Annotation은 소스코드에 주석을 다는 일이다.
별도의 properties파일이나 xml같은 설정파일에 작성하는 부가적인 정보를 어노테이션으로 간편하게 설정할 수 있으므로, 코드의 양을 줄일 수 있다.
어노테이션은 @를 붙여 사용하며, 우리가 흔히 볼 수 있었던 어노테이션에는 @Override, @Deprecated 등이 있다.
어노테이션은 아래와 같이 사용자가 정의해서 쓸 수 있다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
public String defaultVal() default "OK";
public String val();
}
@Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
public String defaultVal() default "OK";
public String val();
}
여기서 Target은 어노테이션을 적용할 대상을 선택하고, Retention은 이 어노테이션의 정보가 어디까지 유지되는지 지정한다.
@Target - Constructor, Field, Enum, Local Variable, Method, Package, Parameter, Type(Class)
@Retention - Source, Class, Runtime
@Documented - 어노테이션을 javadoc에 포함한다.
@Inherited - 어노테이션 상속을 가능케 한다.
다음은 위에 정의한 어노테이션을 어떻게 사용하는지 보겠다.
@Anno(val = "Annotation!!")
public class Member {
.....
}
public class Member {
.....
}
Target을 TYPE인 클래스에 했으므로 위와 같이 클래스 위에 어노테이션을 사용하고, 아래와 같은 방식으로 어노테이션의 정보를 알아 올 수 있다.
Member member = new Member();
System.out.println(member.getClass().getAnnotation(Anno.class).val());
System.out.println(member.getClass().getAnnotation(Anno.class).defaultVal());
System.out.println(member.getClass().getAnnotation(Anno.class).val());
System.out.println(member.getClass().getAnnotation(Anno.class).defaultVal());
결과는
Annotation!!
OK
출처 : http://blog.naver.com/cracker542/40159657935
What are Java Annotations
Java5 에 소개된 기능으로, meta data 를 코드형태로 담을 수 있고, runtime 에 이 meta data 에 접근할 수 있다. pre-compiler 가 코드를 conversion 할 때 사용되기도 한다.
Annotation 은 interface 형태이다.
@Retention( RetentionPolicy.RUNTIME );
@Target( ElementType.TYPE )
public @interface TestAnnotation{
public String name();
public String value();
}
@TestAnnotation(name="variable", value="value")
public class TestClass{
// ...
}
@Retention( RetentionPolicy.RUNTIME ) 은 runtime 에 reflection 형태로 사용될 수 있다는 것을 의미한다.
이 구문이 없으면 runtime 에 이 annotation 은 사라진다. ( 구체적으로 compile time 에 제거한다. )
@Target( ElementType.TYPE ) 은 class, interface 와 같은 type 에 쓰인다는 것이다. TYPE 대신 METHOD, FIELD 를 줄수도 있다. 만약 이를 명시해주지 않으면 모든 곳에 사용될 수 있다.
Class Annotations
Annotations[] annotations = aClass.getAnnotations();
if ( annotaion instanceof TestAnnotation ){
((TestAnnotation )annotaion).name();
((TestAnnotation )annotaion).value();
}
Method Annotations
method.getDeclaredAnnotations();
Parameter Annotations
method.getParameterAnnotations();
Field Annotations
field.getDeclaredAnnotations();
field.getAnnotation( TestAnnotation.class );
댓글 없음:
댓글 쓰기