Lombok은 Java기반에서 VO
, DTO
, Entity
클래스를 생성할 때 반복적으로 작성하는 getter
, setter
, toString
과 같은 작업들을 어노테이션을 사용하여 보다 더 간편하게 개발할 수 있게 도와주는 라이브러리이다.
JPA
를 사용하고 있는 경우 JPA
환경과 일관화됨으로 가독성이 좋은 코드를 작성할 수 있다.다양한 IDE를 지원하지만 가장 많이 사용하는 Eclipse
와 IntelliJ
두 IDE의 설치방법에 대해 알아보겠다. (사실 내가 이 두가지 IDE를 사용한다.)
다른 IDE의 설치방법을 알고싶다면 공식홈페이지의 [Install] 탭에 자세하게 설명되어있다.
롬복 공식사이트에서 파일을 다운받고 실행시키면 아래와 같은 화면이 나오고 내 PC에 설치되있는 IDE를 선택하고 "install/Update"버튼을 눌러 설치를 하면 된다.
(Eclipse
실행한 상태에서 설치를 했다면 재시작을 해야한다.)
IntelliJ
Lombok은 설치방법은 비교적 간단하다.
Preferences > Plugins > Browse repositories.. > Lombok 검색 > Install > restart
설치를 마친 후에 프로젝트에 적용되어 있는 빌드 방식에 따라 lombok을 추가해준다.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.12'
annotationProcessor 'org.projectlombok:lombok:1.18.12'
testCompileOnly 'org.projectlombok:lombok:1.18.12'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.12'
}
VO
, DTO
클래스를 생성할 때 보통 아래와 같이 생성자, getter
, setter
, toString
이 포함되어있는 코드를 작성하게 된다. IDE에서 Generate해주는 편리한 기능이 있지만 인자가 많아질 수록 코드의 양은 늘어나고 가독성 또한 떨어진다.
public class TestVO {
private long id;
private String name;
private String nickName;
private double weight;
private double height;
public TestVO() {}
public TestVO(long id, String name, String nickName, double weight, double height) {
this.id = id;
this.name = name;
this.nickName = nickName;
this.weight = weight;
this.height = height;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
public String toString() {
return "TestVO{" +
"id=" + id +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
", weight=" + weight +
", height=" + height +
'}';
}
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
다섯가지 어노테이션을 사용함으로 코드의 양을 줄일 수 있을 뿐만 아니라 가독성 또한 좋아진다.
import lombok.*;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class TestVO {
private long id;
private String name;
private String nickName;
private double weight;
private double height;
}
위 다섯가지의 어노테이션을 모두 사용할 경우에는 @Data
어노테이션 하나면 더 깔끔하게 적용할 수 있다.
하지만 @Data
어노테이션은 가급적 지양하도록 한다.(lombok 사용 시 주의해야 할 점)
import lombok.*;
@Data
public class TestVO {
private long id;
private String name;
private String nickName;
private double weight;
private double height;
}
이렇게 lombok을 적용하게 되면 작업성과 코드의 가독성 두 가지 이점을 얻을 수 있다.
lombok에서 자주 사용되는 어노테이션을 정리해본다.
@Getter
는 모든 필드에 대해서 getter
메서드를 생성해주며, @Setter
는 모든 non-final 필드의 setter
메서드를 생성해준다.
@Setter
사용시 유의해야 할 점무분별한 @Setter어노테이션의 사용은 지양한다. Setter는 객체를 언제든지 변경할 수 있는 상태가 되어서 변경되지 않아야할 필드에 @Setter를 적용하는 경우에는 객체의 안전성이 보장받을 수 없다.
import lombok.*;
@Getter
@Setter
public class TestVO {
private long id;
private String name;
private String nickName;
private double weight;
private double height;
}
파라미터가 없는 생성자를 만들어주는 어노테이션이다.
모든 필드값을 파라미터로 받는 생성자를 만들어주는 어노테이션이다.
접근제어자 final
이나 notNull
인 필드값만 받아 생성자를 만들어 주는 어노테이션이다.
import lombok.*;
import javax.validation.constraints.NotNull;
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class TestVO {
@NotNull
private long id;
private String name;
private String nickName;
private double weight;
private double height;
}
@Notnull
어노테이션은 Class
위에서는 사용이 되지 않는다. Class
내 필드값에 직접 사용한다. (위 코드 참고)
클래의 다수의 필드값이 있는 경우 생성자를 만들 때 필드값이 많고 순서 또한 맞춰서 파라미터값을 입력해야 하기 때문에 코딩할 때 불편한 경우가 있다.
@Builder
어노테이션을 사용하게 되면 자동으로 빌더패턴을 생성해줌으로 작업하는데 많은 도움을 준다.
import lombok.*;
import javax.validation.constraints.NotNull;
@Builder
public class TestVO {
@NotNull
private long id;
@NotNull
private String name;
private String nickName;
private double weight;
private double height;
// @Builder 적용 예시
public class BuilderExClass {
TestVO testVO = TestVO.builder()
.id(1L)
.nickName("nickName")
.name("green")
.height(80)
.height(180)
.build();
}
}
lombok을 사용하면서 자주 사용되는 어노테이션이 있으면 추가로 작성할 예정이다.
이렇게 lombok어노테이션을 잘 활용하면 작업성과 가독성의 두 마리 토끼를 잡을 수 있게 된다. 하지만 사용할 때 JPA
와 같은 ORM
등과 같이 사용할 때 발생할 수 있는 오류들에 대해 염두해두고 사용해야한다.
공식 문서도 잘 설명되어 있는 편이라서 참고해보면 좋다.