Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

디지안의 개발일지

[Guide] Intellij에 Lombok 설정하기 본문

Java

[Guide] Intellij에 Lombok 설정하기

안덕기 2021. 9. 25. 12:48

들어가기 전에

 코틀린만 사용하다가 자바를 사용할 기회(?)가 있어서 자바 코드를 열심히 작성하였다. 그런데 생성자, Getter, Setter를 모두 작성하다보니 코드의 양이 너무 많아져서 Lombok을 찾게 되었고 설정하는 것에 대해서 정리하려고 한다.

 

Lombok이란?

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
-Project Lombok-

 위 글은 프로젝트 롬복 공식 사이트에 들어가면 나오는 문구로 적당히 요약해서 해석하면 "Java를 사용할 때 작성하기 귀찮은 생성자, Getter, Setter를 자동으로 만들어주기 위해 편집기나 빌드 툴에 자동으로 연결되는 자바 라이브러리다." 정도로 해석이 된다. 결과적으로 Lombok은 @(애노테이션)을 통해서 코드의 양을 줄이는 효과를 볼 수 있다. (Lombok과 스프링을 같이 쓰면 애노테이션 기반 프로그래밍을 할 수 있다.)

 

Lombok 플러그인 설치

Intellij에서 Lombok을 인식하기 위해서는 플러그인을 설치해야한다. (몰랐는데 깔려있었다.)

플러그인을 설치해야하는 이유는 간단하다. Intellij의 코드 분석 엔진은 javac를 사용하지 않고 애노테이션을 실행할 수 없기 때문에 Lombok을 인식시켜주는 과정이 필요하다. 그 역할을 Lombok 플러그인이 해준다. (참고)

Enable annotation processing

컴파일 하는 시점에 IDEA에서 애노테이션을 통한 코드를 생성할 수 있게 해야한다. 그 설정은 다음과 같다. (참고)

의존성 추가

마지막으로 Lombok에서 사용할 수 있는 인터페이스를 제공 받기 위해 의존성을 추가하면 된다.

compileOnly 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'

 

Lombok 적용

아래와 같은 POJO에 Lombok을 적용해보자.

public class ExtractorInputFormDto {
        private String url;
        private FilterType type;
        private int bundleUnit;

        public ExtractorInputFormDto() { }

        public ExtractorInputFormDto(String url, FilterType type, int bundleUnit) {
            this.url = url;
            this.type = type;
            this.bundleUnit = bundleUnit;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public FilterType getType() {
            return type;
        }

        public void setType(FilterType type) {
            this.type = type;
        }

        public int getBundleUnit() {
            return bundleUnit;
        }

        public void setBundleUnit(int bundleUnit) {
            this.bundleUnit = bundleUnit;
        }

        @Override
        public String toString() {
            return "ExtractorInputFormDto{" +
                    "url='" + url + '\'' +
                    ", type=" + type +
                    ", bundleUnit=" + bundleUnit +
                    '}';
        }
}

적용하면 다음과 같다. 개발자 입장에서는 코드가 많이 줄어서 보기 편하다.

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class ExtractorInputFormDto {
    private String url;
    private FilterType type;
    private int bundleUnit;
}

 

마무리

실무에서는 워낙 코드량이 많기 때문에 Lombok을 사용하면 코드의 양을 많이 줄일 수 있다. 다만, 좋은 점이 있으면 나쁜 점이 따른다.

애노테이션을 많이 붙여야되고 애노테이션이 어떻게 동작하는지 모르면 코드를 이해하기가 어렵다. 그래도 결국은 Lombok을 사용하면 코드의 양이 드라마틱하게 줄어들기 때문에 쓸 수 밖에 없는 것 같다. (Kotlin을 사용하면 Lombok을 사용하지 않아도 된다.)

'Java' 카테고리의 다른 글

[책] 자바 성능 최적화  (0) 2022.08.29