[IntelliJ] IntelliJ Lombok 설치 및 설정
안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 인텔리제이 롬복 설정 ] 입니다. : )
0.롬복(Lombok)이란?
▶ 롬복(Lombok)
- 롬복(Lombok)은 Java Domain(Dto, Vo)에서 반복적으로 작성되는 getters/setters나 toString, 생성자 관련 코드 등의 소스들을 간결하게 만들어주는 라이브러리다. - 롬복에 대한 설명은 다음 링크의 포스팅에서 설명 해 두었다. (https://goddaehee.tistory.com/95)
이번 포스팅 에서는 롬복을 인텔리 제이에 설치 & 적용 하는 방법을 간단히 설명하려 한다.
1.IntelliJ 롬복 Plugin 설치
▶ 인텔리 제이 - 롬복 플러그인 설치
- Setting > Plugins - Marketplace 탭에서 Lombok을 검색하여 플러그인을 설치할 수 있다.
2. Dependency 설정
- 최신 버전의 롬복을 적용하려 한다. https://mvnrepository.com/artifact/org.projectlombok/lombok - 현재 기준의 최신 버전은 1.18.12 이다. (2020/02/18)
▶ 1. maven - pom.xml
▶ 2. gradle
3. Enable annotation 설정
- settings > Build, Execution, Deployment > Compiler > Annotation Processors - Enable annotation processing 체크
4. 적용 예시
- 다음의 샘플 DTO 소스를 예로 들어 이제부터 롬복을 적용 해보자.
- ex) 샘플 DTO(vo, domain)
▶ 4.1 @Getter @Setter
- @Getter와 @Setter 애노테이션을 클래스명 위에 명시하면, 필드값에 대한 getters/setters 메소드가 자동 생성된다. - " AccessLevel"을 통해 접근 제한자 설정이 가능하다. (Default : Public) ex) @Getter(access = AccessLevel.PROOTECTED) - 클래스에 선언시 모든 필드에 대해 생성, 필드에 선언시 선언된 필드에 대해서만 getter, setter를 생성한다.
▶ 4.2 @NoArgsConstructor @AllArgsConstructor
- " AccessLevel"을 통해 접근 제한자 설정이 가능하다. (Default : Public)
ex) @NoArgsConstructor(access = AccessLevel.PROOTECTED)
- @NoArgsConstructor : 기본생성자를 자동 생성해준다.
- @AllArgsConstructor : 필드값을 모두 포함한 생성자를 자동 생성해준다.
▶ 4.3 @ToString
- toString 메소드를 자동생성 하여 준다.
- 클래스명(필드명1=값1, 필드명2=값2, . . . ) 형태로 출력된다. - exclude 키워드를 이용하여 출력을 원치 않는 필드 지정이 가능하다.
- 필드의 명을 출력하고 싶지 않을때 : includeFieldNames을 false. 제외시키고 싶은 필드는 exclude 파라미터에 추가하면된다.
- of 파라미터를 이용하여 원하는 필드만 출력할 수 도 있다. 부모 클래스의 toString을 출력하고 싶은 경우에는 callSuper 파라미터를 true로 설정하여 포함시킬 수도 있다.
- ex1) toString > 모든 필드 출력
- ex2) exclude 선언 - name 변수만 노출된 것을 볼 수 있다.
▶ 4.4 @EqualsAndHashCode
- equals()와 hashCode()를 자동으로 생성해 준다.
ex) 위의 예시 샘플 소스에 롬복 적용시
▶ 4.5 이외
① @Notnull
- 멤버필드에 선언해 주면, 해당 변수 Setter에 null값이 들어 올 때 NullPointException을 발생시킨다.
- ex)
② @cleanup
- try finally에서 close()를 대신 호출해주는 어노테이션
③ @Synchronized
- 자바의 synchronized를 사용할 때 deadlock이 발생하는 경우가 종종 발생하는걸 방지하기 위해 Lombok이 메소드가 실행되기 전에 잠글 $ lock이라는 개인 잠금 필드를 생성한다.
- lock 오브젝트를 자동으로 생성, synchronized를 손쉽게 사용할수 있게 해준다.
④ @Data
- @Getter, @Setter, @NonNull, @EqualsAndHashCode, @ToString 에 대한 걸 모두 해주는 Annotation
- @NonNull 또는 final 필드를 매개변수로 사용하는 public 생성자가 생성된다.
- @Data는 staticConstructor 하나의 파라미터 옵션만 제공하는데, 파라미터를 이름으로 하는 static factory 메서드를 생성하여 준다.
- ex) @Data(staticConstructor="of")
⑤ @Value
- Value는 Immutable Class을 생성해준다.
- @Data와 비슷하지만 모든 필드를 기본적으로 Private 및 Final로 로 하고, Setter 함수를 생성하지 않고, Class또한 Final로 지정하는 것만 빼고 동일하다.
⑥ @Slf4j, @Log 등
- 해당 어노테이션을 선언하면, log관련 static 메소드를 클래스 별로 선언할 필요가 없다. - ex)
⑦ @Builder
- 어노테이션을 선언하면 생성자 대신에 빌더를 사용할 수 있다. - @Singular : collection 타입에 선언하게 되면 파라미터를 하나씩 추가할 수 있다. - ex)
※ 롬복의 실무 적용 시에는 왠만하면 @Getter, @Setter, @ToString @Slf4j 등만 사용하길 권장하고 싶다.
특정 버전 이전에서는 생각 보다 많은 버그도 있고, 잘못사용시 의도치않은 버그? 와같은 결과를 얻을 수 있는 사례가 많다.