1. Annotation 정의
음 annotation도 일종의 클래스이다. 단지 메타 정보가 추가된다는 차이정도?
이클립스 File>New>Annotation 을 선택한다.
원하는 Annotation 명을 넣고 생성.
아주 심플하게 Annotation 이 생성되었다.
public @interface MyAnnotation {
}
위처럼 정의하고 필요한 곳에서
@MyAnnotation
public void sampleFunction( ) {
}
이렇게 사용하면 된다.
2. 조금더 세부적인 설정과 멤버변수 추가(META-ANNOTATION)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
public int value();
public String name() default "";
}
@Target : Annotation의 형식을 지정한다.
TYPE은 클래스나 인터페이스, enum 등에 지정.
(TYPE, METHOD, FIELD, CONSTRUCTOR, PARAMETER, LOCAL_VARIABLE, ANNOTATIION_TYPE, PACKAGE)
@Retention : Annotation의 지속성
(CLASS, RUNTIME, SOURCE)
@Inherited : Annotation도 상속
3. Annotation의 사용
@MyAnnotation( value=0, name="Test Object")
public class TestDataClass {
}
4. Annotation 정보 얻기
TestDataClass data = new TestDataClass();
Annotation anno = data.getClass().getAnnotation(MyAnnotation.class);
if( anno instanceof MyAnnotation ) {
MyAnnotation myAnno = (MyAnnotation) anno;
myAnno.value();
myAnno.name();
}
5. 메쏘드 Annotation을 검색
Annotation Target 수정
@Target(Element.METHOD)
.
.
public class TestDataClass {
@MyAnnotation( value=10, name="function 1")
public void sampleFunction() {
.
.
}
}
// 일단 해당 클래스의 메쏘드들을 모두 읽어온다.
Method[] methodArray = data.getClass().getMethods();
// 루프를 돌며 메쏘드 Annotation을 검사한다.
for( Method method : methodArray ) {
// 메쏘드에 annotation 이 있는지 확인
if( method.isAnnotationPresent( MyAnnotation.class ) ) {
Annotation[] anns = method.getDeclaredAnnotations();
// Annotation[] anns = method.getAnnotations();
// Annotations ann = method.getAnnotation( MyAnnotation.class );
for( Annotation ann : anns ) {
if( ann instanceof MyAnnotation ) {
MyAnnotation myAnno = (MyAnnotation) anno;
myAnno.value();
myAnno.name();
// 해당 메쏘드를 실행하는 등의 처리~
method.invoke( data );
}
}
}
}
요렇게 다양한 object들에 대해 Annotation과 그 멤버 변수값에 따라 임의의 처리가 가능하게 된다. 일반적으로 클래스 혹은 인터페이스를 상속해 그룹을 지어 사용하게 되는데, Annotation을 사용하면 서로다른 클래스나 이름이 다른 메쏘드를 Annotation에 따라 호출이 가능해진다.
'프로그래밍 > JAVA' 카테고리의 다른 글
힙 덤프 명령 (0) | 2017.02.23 |
---|---|
jni 관련~ (2) | 2014.04.16 |
AES 암호화 (0) | 2014.03.27 |
[OSGi] 서비스 등록 및 해제 (0) | 2014.03.21 |
[eclipse] eclipse 4 platform (0) | 2014.03.17 |
[swt] 이벤트 (0) | 2014.03.14 |
[eclipse] Extention Points (0) | 2014.03.14 |
[eclipse] simple plug-in example (0) | 2014.03.13 |
Apache HttpClient 관련 정리 (0) | 2014.03.11 |
[JAVA TV] MHP 배경이미지 처리 (0) | 2013.12.27 |