[컴][자바] 자바에서 자신만의 annotation 만들기

custom annotation 만들기 / 커스텀 annotation / 자신만의 annotation



간단한 annotaion 만들기

갑자기 annotation 을 사용해 보고 싶어서 작성을 한 번 해보도록 하자. annotation 은 생각보다 간단하게 만들 수 있다. 일단 만드는 순서는 아래와 같다.


일단 interface 를 하나 만들자.
public interface TestAnno {

    String value();
}

여기에 interface 앞에 @를 붙이자
public @interface TestAnno {

    String value();
}


그러면 annotation 은 다 만든 것이다. 이것은 이제 annotation 처럼 사용하면 된다.

annotation 에서 선언한 method 이름은 아래처럼 annotation을 사용할 때 변수처럼 사용된다. 위의 경우처럼 method 가 한 개인 annotation 에서는 method 이름을 생략해서 사용할 수 있다.

public class Test {
   

    @TestAnno(value="string")
    public void doing(){

    }
}

public class Test {
   

    @TestAnno("string")
    public void doing(){

    }
}


default value

default 값도 할당할 수 있다.

public @interface TestAnno {

    String value() default "myWorld";
}

default 값이 할당 되어 있으면, 아래처럼 인자를 넣지 않아도 사용할 수 있다.

public class Test {
   
    @TestAnno
    public void doing(){

    }
}


annotation 의 사용

 ref. 2 에 따르면 annotation 은 metadata 를 표시하기 위한 장치라고 이야기 한다. 이제 까지 필자가 겪어본 annotation 의 사용들을 보면 meta-programming 에 도움을 주는 요소라고 표현할 수 있을 듯 하다.

annotation 을 우리말로 번역하면 "주석" 이다. 즉 소스코드에 부가적인 설명을 덧붙이는 것이다.

이런 설명(annotation)은 그냥 코드의 가독성을 위해 적어놓기도 하고, 또는 다른 code 에서 읽을 수 있기 때문에 programming 으로 처리할 수 있다. 즉 자동화가 가능하다. 여러가지 반복적으로 처리돼야 하는 귀찮은 일들을 source code 안으로 가져와서 자동으로 처리하게 할 수 있다.

이와 관련해서는 annotation 의 Retention 설정을 RUNTIME 으로 해줘야 한다.[ref. 4] 만약 Retention 설정이 RUNTIME 으로 되어 있지 않으면, runtime 에 isAnnotationPresent() 같은 함수에서는 false 를 return 한다. Retention 과 관련해서는 ref. 1 을 참고하도록 하자.


@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnno {

    String value();
}

public class Main {

  public static void main(String[] args) {

    Method methods[] = new Test().getClass().getDeclaredMethods();

    for (int i = 0; i < methods.length; i++) {
        String methodsName = methods[i].getName();
        System.out.println(methodsName);
        if (methods[i].isAnnotationPresent(TestAnno.class)
                && methodsName.startsWith("do")) {
            methods[i].getDeclaredAnnotations();
        }

    }
  }
}


그 밖에

 이 밖에도 annotation 과 관련되어서 아래와 같은 내용들을 ref. 1 에서 읽을 수 있다.
  1. Default 값을  가지는 어노테이션 유형
  2. Target지정하기
  3. Retention 설정 (*retentions 의 사전적 의미는 : 보존, 보유, 감금, 보존력 )
  4. Documented
  5. Inherited


References

  1. 머찐아빠 :: 나만의 어노테이션(커스텀 어노테이션) 만들기
  2. Bridging the Gap: J2SE 5.0 Annotations, Kyle Downey 10/06/2004
    번역 : annotation 이란?
  3. java - get annotation value? - Stack Overflow
  4. Is it possible to read the value of a annotation in java? - Stack Overflow






댓글 2개: