본문 바로가기
학습/Java

[java] Annotation Processor란? (추가공부 필요)

by KKambi 2020. 3. 21.

Annotation Processing?

출처 정의
Stackoverflow

- Annotation Processing is a hook into the compile process of the java compiler, to analyse the source code for user defined annotations and handle then by producing compiler errors, compiler warning, emitting source code, byte code.

 

- 어노테이션 프로세싱은 자바 컴파일러의 컴파일 단계에서, 유저가 정의한 어노테이션의 소스코드를 분석하고 처리하기 위해 사용되는 훅이다. 컴파일 에러나 컴파일 경고를 만들어내거나, 소스코드(.java)와 바이트코드(.class)를 내보내기도 한다.

Hannesdorfmann.com

- Annotation processing is a tool build in javac for scanning and processing annotations at compile time. You can register your own annotation processor for certain annotations.

 

- 어노테이션 프로세싱은 컴파일 타임에 어노테이션을 스캔하고 처리하기 위해 자바 컴파일러에 삽입된 툴이다. User-Defined Annotation을 등록할 수도 있다.

 

Annotation Processor 특징

  설명
정의

- 컴파일 단계에서 어노테이션을 분석하고 처리하기 위해 자바 컴파일러에 동봉된 hook

Input

- source code(.java) || compiled byte code(.class)

Output

- usually source code(.java) || sometimes byte code(.class)

Hook의 본질

- 이미 작성된 코드의 특정 지점을 가로채서 동작 방식을 변화시킨다.

- 대상 코드의 소스를 수정하지 않고 원하는 동작을 구현해야 한다.

Hook에 부합하는 어노테이션 프로세서

- You can generate java code! The generated java code is in a generated .java file. So you can not manipulate an existing java class for instance adding a method. The generated java file will be compiled by javac as any other hand written java source file.

 

- 자바 코드(.file)를 만들 수 있다. 따라서 메소드 추가를 위해 인스턴스 생성을 위한 기존 자바 클래스를 조작할 필요가 없다. 마치 직접 코딩한 자바 소스 파일처럼, 자바 컴파일러에 의해 컴파일될 것이다.

 

Annotation Processor 분석

- 모든 프로세서는 AbstractProcessor를 상속받는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.example;
 
public class MyProcessor extends AbstractProcessor {
 
    @Override
    public synchronized void init(ProcessingEnvironment env){ }
 
    @Override
    public boolean process(Set<extends TypeElement> annoations, RoundEnvironment env) { }
 
    @Override
    public Set<String> getSupportedAnnotationTypes() { }
 
    @Override
    public SourceVersion getSupportedSourceVersion() { }
 
}
cs

 

 

 

 

출처

https://stackoverflow.com/questions/2146104/what-is-annotation-processing-in-java

http://hannesdorfmann.com/annotation-processing/annotationprocessing101

http://jinuine.blogspot.com/2014/05/hooking-hooking.html

 

'학습 > Java' 카테고리의 다른 글

[java] 익명 클래스와 람다식  (0) 2020.06.10
[java] Proxy Pattern  (0) 2020.03.23
[java] Optional 클래스  (0) 2020.02.29
[java] Enum의 개념과 사용법  (0) 2020.02.23
[java] Mustache 사용하기  (3) 2020.02.15

댓글