Java
Java - 애노테이션 프로세서
엔꾸꾸
2019. 11. 12. 22:13
애노테이션 프로세서
롬복은 어떻게 동작할까 ?
- 롬복은 지루하고 반복적인 코드를 자동적으로 생성해주는 툴이다.
- getter, setter, toString...
롬복의 원리
- 자바가 제공하는 애노테이션 프로세서를 이용한 기술
- 컴파일 시점에 끼어들어 특정 애노테이션이 붙은 소스코드를 참조해 다른 소스코드를 생성할수 있는 기능이다.
- 자바코드, 문서 등을 만들어 낼 수 있다.
- AST(Abstarct Syntax Tree) 소스코드의 정보를 트리구조로 볼 수 있다.
- 이를 신텍스 트리라고 한다.
- 본래는 참조만 가능하다.
논란 거리
- 공개된 API가 아닌 컴파일러 내부 클래스를 사용하고 기존 소스코드를 조작한다.
- 특히 이클립스의 경우 java agent를 사용하여 컴파일러 클래스까지 조작하여 사용한다. 해당 클래스들 역시 공개된 API가 아니다 보니 버전호환성에 문제가 생길수 있다.
- 롬복이 해킹이라고 주장하고 사용해선 안된다는 개발자들도 상당히 많다.
- 그럼에도 불구하고 100% 대안은 없다.
- 대안
- AutoValue
- Immutables
참고
- https://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/Processor.html
- https://projectlombok.org/contributing/lombok-execution-path
- https://stackoverflow.com/questions/36563807/can-i-add-a-method-to-a-class-from-a-compile-time-annotation
- http://jnb.ociweb.com/jnb/jnbJan2010.html#controversy
- https://www.oracle.com/technetwork/articles/grid/java-5-features-083037.html