Wednesday, August 26, 2015

[What is java annotation 01] - Annotation?

1. Annotation ?

Annotation의 '주석' 이라는 의미를 가진 단어입니다. 하지만 Java 언어에서는 우리가 흔히 알고있는 일반적인 주석 '//' , '/**/' 과는 다른 용도로 사용됩니다. Annotation은 구현되는 정보에 따라 연결되는 방향이 결정되며, 전체 소스코드에서 비즈니스 로직에 영향을 주지는 않지만 해당 타겟의 연결 방법이나 소스 코드의 구조를 변경할 수 있는 역할을 합니다.

Java 어노테이션은 3가지 기능을 수행할 수 있습니다.

  • Compile instructions (컴파일시)
  • Build-time instructions (빌드시)
  • Runtime instructions (실행시)

Build Time에 Java annotations을 쓴다면, Build Process에서 Source Code 생성, Source Code 컴파일, XML 파일들 생성, Compile Code 패키징, jar 파일에 넣는 작업을 모두 수행하게 됩니다. 보통 Apache Ant, Apace Maven을 사용하며, Build Tool이 위의 작업을 수행하게 됩니다.

자바 Annotation은 컴파일 이후에는 판단 할 수 없지만, Runtime 시에도 Annotation을 사용할 수 있습니다. Runtime시에 작동되는 Annotation은 Java Refelection()에 접근가능하며 명령이나 third party api를 호출할 수 있습니다.

1.1. Java Reflection

Class 정보를 읽어 Instance에 Annotation에 해당하는 기능을 정의하는 방식으로 Web Framework에서 많이 사용되는 Spring Framework가 주로 사용 하는 방식이다. Android 계열에서는 DaggerRoboGuice와 같은 프레임워크가 해당되는 Annotation 사용방법을 사용하고 있다.

1.2. Annotation Processing Tool (apt)

Compile 단계에서 Annotation 이 정의된 타겟의 정보를 미리 정의 하는 방식으로 AndroidAnnotations Framework가 해당되는 기능을 수행한다. Source Code 에서 Annotation을 지정한다면, Annotation Proceesor가 해당되는 내용에 대한 소스코드를 생성하고 그 파일을 다시 생성하는 방식을 말합니다. 이와 같이 Compile 단계에서 수행하기 때문에 Runtime 시에는 영향이 거의 없다는 장점이 있습니다.

참고 논문 및 사이트

1. Java Annotation: 인터페이스 강요로부터 자유를… - http://www.nextree.co.kr/p5864/

2. Java Annotations - 인터페이스 강요로부터 자유를… - http://tutorials.jenkov.com/java/annotations.html

3. Android 와 Annotation - http://tosslab.github.io/android/2015/03/01/02.android%20%EC%99%80%20annotation/

No comments:

Post a Comment