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를 작성