lombok 은 어떻게 동작하는 것일까?
Last updated
Was this helpful?
Last updated
Was this helpful?
지금까지 살펴본 것은 모두 소스코드에서 컴파일 완료된
.class
파일을 변경하여 사용하는 방법을 알아봤었다. 그렇다면, 컴파일 되기 전에 자바 소스코드 -> 컴파일 사이에 아예 조작하는 방법은 없을까?-> lombok 이 그 대표적인 예시가 된다.
lombok 라이브러리는 보통 객체를 만들고 나서 자주 구현하게 되는 getters, setters, equals, hashCodes 와 같은 매소드들을 @Getter, @Setter, @EqualsAndHashCodes 과 같은 어노테이션과 어노테이션 프로세스를 제공하여 표준적으로 작성해야할 코드를 개발자 대신 생성해준다.
컴파일 시점에 어노테이션 프로세서를 사용하여 소스코드의 AST 를 조작한다.
AST
abstract syntax tree
공개된 API 가 아니라 컴파일러 내부 클래스를 사용하여 기존 소스코드를 조작하고 있다.
특히 이클립스의 경우는 javaagent 를 사용하여 컴파일러 클래스까지 조작하여 사용한다. 해당 클래스들 역시 공개된 API 가 아니다보니, 버전 호환성에 문제가 생길 수 있고, 언제라도 그런 문제가 발생해도 이상하지 않다.
이렇게 논란이 많지만, 롬복 자체가 너무 편하고, 이를 대체할 수 있을 만큼 편리한 것이 없기 때문에, 널리 사용되고 있는 상황이다.