Lombok

소프트웨어 마에스트로 14기 팀 프로젝트에서 나는 백엔드 파트를 담당하여 Spring Boot를 통한 API 서버 개발을 하게 되었다. 이를 위해 학습 차 게시글을 작성하게 되었다.


정의

  Lombok이란 Java 언어를 사용하는 개발자들을 위한 오픈 소스 라이브러리로, 반복되는 메서드를 Annotation을 사용하여 자동으로 작성해주는 라이브러리이다. Java 소스코드에서 반복적이고 지루한 작업을 줄여주고 코드의 가독성을 향상시키는 데 도움을 준다.
  개발자들이 Getter, Setter, 생성자, equals 및 hashCode 메서드, toString 메서드 등과 같은 보일러플레이트 코드를 직접 작성하지 않고도 자동으로 생성할 수 있도록 해준다. Lombok을 이용하여 작성된 코드는 컴파일 과정에서 Annotation을 이용해서 코드를 생성하고 .class에 자동 컴파일된다. 또한 주로 Spring 프레임워크와 함께 사용된다.

사용 방법

build.gradle 추가

dependencies {
	...
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	...
}

혹은

dependencies {
    ...
    compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
    ...
}

Annotations

  • @Getter, @Setter : get 메서드와 set 메서드를 생성할 필요 없이 해당 어노테이션을 사용하여 클래서 전체 혹은 특정 멤버 변수에 대한 getter, setter 메서드를 자동으로 생성해줌 (ex: 필드의 이름이 X 일 때 - getX(), setX())

    import lombok.Getter;
    import lombok.Setter;
    
    @Getter
    public class UserDTO {
      private String id;
      @Setter
      private String name;
    }
    
    
  • @NonNull : 메서드 혹은 생성자의 매개변수에 @NonNull을 사용하면 lombok이 null check를 함

  • @ToString : lombok이 toString() 메서드를 생성함(클래스에 붙여 사용). 출력하고 싶지 않은 변수에는 @ToString.Exclude 어노테이션을 붙여 출력을 제외할 수 있음. 또한 부모클래스에 대해서도 toString을 적용하기 위해 @ToString(callSuper = true)라는 옵션을 적용할 수도 있음

    import lombok.ToString;
    
    @ToString
    public class UserDTO {
      @ToString.Exclude
      private String id;
      private String name;
    }
    
  • @EqualsAndHashCode : equals(Object other)와 hashCode() 메서드를 생성

  • Data : 모든 필드에 대한 @ToString, @EqualsAndHashCode, @Getter와 모든 non-final(final이 아닌) 필드에 대해 @Setter를 설정하고 @RequiredArgsConstructor를 설정

  • @NoArgsConstructor : 매개변수가 없는 기본 생성자를 생성함, 만약 final 필드로 인해 불가능하다면 컴파일 에러가 발생함. @NoArgsConstructor(force = true) 시 컴파일 에러 대신 모든 final 필드는 기본값(0 or false or null)로 초기화

  • @RequiredArgsConstructor : final 필드, @NonNull 필드에 대한 생성자를 생성해주며 의존성을 주입받을 수 있음. @NonNull 필드의 경우 null check 구문 또한 생성할 수 있음

  • @AllArgsConstructor : 모든 필드에 대한 생성자를 만들어줌. 마찬가지로 의존성을 주입받을 수 있으며, @NonNull 필드에 대한 null check 구문을 생성할 수 있음

  • @Builder : 빌더를 자동으로 작성해줌. 클래스에 작성하면 모든 필드에 대한 빌더를 생성, 특정 필드에만 빌더를 작성하고 싶은 경우 생성자를 작성한 후 @Builder를 작성

Reference