2007년 9월 28일 금요일

Java 중의 Annotation

Java 중의 Annotation 해석

프로그래밍, 특히 자바 프로그래밍의 최신 경향 중 하나는 metadata를 사용한다는 것이다. 메타데이터는 간단히 말해서 데이터에 대한 데이터이다. 메타데이터는 문서화에 사용될 수 있고 코드 의존성을 트래킹하는데 사용되며 심지어 초기 컴파일 시간 체크를 수행 할 때도 사용될 수 있다.

메타데이터의 가치

일반적으로 메타데이터의 효용은 세 가지로 나눌 수 있다. 문서화, 컴파일러 체크, 코드 분석. 코드 레벨의 문서화는 가장 자주 인용되는 사용법이다. 메타데이터는 메소드가 다른 메소드에 의존하고 있다는 것을 가르키는 유용한 방법을 제공한다. 또한 그들이 불완전한지, 특정 클래스가 또 다른 클래스를 레퍼런싱 하는지 등을 가르킨다. 이는 정말로 유용하지만 문서화는 메타데이터를 자바에 추가하는 것과 가장 관련이 적은 항목이다. 코드의 문서화에 있어서는 Javadoc이 사용이 쉽고 강력한 방식을 제공하고 있기 때문이다.

그렇다면 Annotation은 무엇인가?

어노테이션은 프로그램의 요소 예하면 클래스, 속성, 파라미터, 지역변수들을 연결시키는 연결고리로써 어노테이션을 해줌으로써 이런 요소들에 대한 메타정보를 클래스내에 포함시켜 관리할 수가 있다.

간단한 Annotation을 정의해보자!

어노테이션 정의는 상당히 쉽다고 볼수 있다. 어찌보면 Interface정의와 아주 흡사하다. @ + Annotation 유형 + ( 콤마로 분할된 name - value 쌍 ).
아래에 간단한 예를 보여주겠다.

소스열기

@Retention(RetentionPolicy.RUNTIME) 이 어노테이션은 우리가 정의한 SimpleAnnotation을 Class파일속에 넣어서 저장하고 VM이 구동될때 어노테이션을 자동으로 로딩하겠다는 명시이다.
또한 @Target(ElementType.METHOD)는 우리가 아래에 정의하는 어노테이션들을 클래스속의 메소드들을 묘사하는데 사용이 되여진다는 명시이다.

정의한 Annotation을 사용해보자!

소스열기

위에서 우리는 정의된 어노테이션이 메소드를 묘사할때 사용될것이라고 명시했었다. 따라서 이렇게 정의된 어노테이션을 사용할때는 반드시 메소드앞에 정의된 어노테이션을 사용하여야 한다. (만약 필드에 대하여 묘사를 하겠다고 정의를 하였다면 필드가 정의되기전에 이미 어노테이션으로 해당 필드에 대하여 묘사를 해야 한다.)

실행중인 프로그램에서 Annotation을 접근해보자!

일단 프로그램내의 요소와 Annotation이 연결이 되여지면 VM실행중 특정된 요소에 대한 정보를 알아낼수 있다. 여기서 보통은 Reflection을 이용하여 이런 정보에 대한 접근을 시도한다.
interface:java.lang.reflect.AnnotatedElement를 이용하여 Annotation에 대한 접근을 시도해보자...
java.lang.reflect.AnnotatedElement 인터페이스에는 아래와 같은 메소드들이 정의되여져 있다.

  1. boolean isAnnotationPresent(Class annotationType)
    특정된 요소에 Annotation이 존재 여부를 반환한다. 만약 Annotation이 존재하면 true를 반환하고 아니면 false를 반환하겠다.
  2. T getAnnotation(Class annotationType)
    특정된 요소에 Annotation이 존재하면 Annotation을 반환하고 아니면 null을 반환한다.
  3. Annotation[] getAnnotations()
    해당 요소에 존재하는 모든 Annotation들을 반환한다. (private은 제외)
  4. Annotation[] getDeclaredAnnotations()
    해당 요소에 존재하는 모든 Annotation들을 반환하다. (private도 포함)

소스열기

댓글 2개:

  1. 소스열기/소스닫기는 어떻게 하는 건가요? 플러그인 같은게 있나요?

    답글삭제
  2. @초보 - 2007/09/28 22:24
    편집창에 보시면 마지막 쯔음 되여, more/less 버튼이 보입니다.

    열고 닫기를 원하는 문단을 선택하시고 more/less 버튼을 클릭합니다. 미리보기를 하셔서 결과를 확인하실수 있습니다.

    답글삭제