Project Lombok
Project Lombok은 getter, setter, tostring, Constructor 등 자바를 통해 개발을 진행함에 있어서 반복되는 소스코드를 어노테이션 형태로 제공하여 반복적인 소스코드 없이 해당 기능등을 사용할 수 있는 라이브러리 입니다.
대표적인 지원기능으로는 Getter, Setter, toString, Constructor의 자동 생성, NonNull을 통한 Null check 로직 추가, Builder 생성 등의 반복적인 소스코드를 어노테이션 형태로 제공합니다.
대표적인 지원기능으로는 Getter, Setter, toString, Constructor의 자동 생성, NonNull을 통한 Null check 로직 추가, Builder 생성 등의 반복적인 소스코드를 어노테이션 형태로 제공합니다.
설정하기
Proejct Lombok은 다른 라이브러리와는 다르게 디펜던시 추가 외에도 IDE에 설치작업을 진행해야 합니다.
Gradle
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'
}
Maven
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
</dependencies>
IDE 설치방법
사용하기
@Getter, @Setter
@Getter, @Setter 어노테이션은 클레스 레벨과 필드레벨에서 사용할 수 있으며 각각 Getter와 Setter를 생성해준다. 기본적으로 Getter, Setter, ToString 등은 IDE의 Code Generator를 통해서 지원하기도 하지만 필드의 변경이 잦은경우 매번 Generator를 통해서 변경해줘야 하는 불편함이 있다. 해당 어노테이션을 사용하게되면 필드의 변경이 잦더라도 Lombok을 통해서 자동 생성되므로 필드 변경에 대한 대응을 할 필요가 없다.
- Class level에서 사용하기
/* Lombok을 사용한 예제 */
@Getter
@Setter
public class User {
private String name;
private String addr;
}
/* Java로만 작성된 예제 */
public class User {
private String name;
private String addr;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public String getAddr() {
return this.addr;
}
public String setAddr(String addr) {
return this.addr = addr;
}
}
- Field level에서 사용하기
/* Lombok을 사용한 예제 */
public class User {
@Getter
@Setter
private String name;
@Getter
private String addr;
}
/* Java을 사용한 예제 */
public class User {
private String name;
private String addr;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return this.addr;
}
}
- @Accessors 어노테이션과 @Setter 어노테이션 같이 쓰기
@Accesoors 어노테이션의 경우 @Setter 어노테이션과 같이 사용할 수 있으며 Setter를 Chainable 하게 설정할 수 있으며 기본적으로 setXXX 처럼 setter에는 set이라는 prefix가 붙는데 이 prefix를 제거 혹은 변경할수도 있다.
/* Lombok을 사용한 예제 */
@Getter
@Setter
@Accessors(chain = true)
public class User {
private String name;
private String addr;
}
/* Java를 사용한 예제 */
public class User {
private String name;
private String addr;
public String getName() {
return this.name;
}
public String setName(String name) {
this.name = name;
return this;
}
public String getAddr() {
return this.addr;
}
public String setAddr(String addr) {
this.addr = addr;
return this;
}
}
@ToString
@ToString 어노테이션은 toString 메소드를 생성해주며 특정 필드를 Exclude, Include 시킬 수 있으며 toString 내에서 필드명을 출력할지 등의 설정을 지원한다.
- 기본 사용법
/* Lombok을 이용한 예제 */
@ToString
public class User {
private String name;
private String addr;
}
/* Java를 이용한 예제 */
public class User {
private String name;
private String addr;
public String toString() {
return "User(name=" + this.name + ", addr=" + this.addr + ") ";
}
}
- Class level에서 Exclude하기
/* Lombok */
@ToString(exclude = {"name", "addr"})
public class User {
private String name;
private String addr;
private int age;
}
/* JAVA */
public class User {
private String name;
private String addr;
private int age;
public String toString() {
return "User(age=" + this.age + ") ";
}
}
- Field Level에서 Include하기
/* Lombok */
@ToString(onlyExplicitlyIncluded = true) // include처리된 필드만 포함
public class User {
@ToString.Include
private String name;
private String addr;
private int age;
}
/* JAVA */
public class User {
private String name;
private String addr;
private int age;
public String toString() {
return "User(name=" + this.name + ") ";
}
}
- Class level에서 Include하기
/* Lombok */
@ToString(of = {"name"})
public class User {
private String name;
private String addr;
private int age;
}
/* JAVA */
public class User {
private String name;
private String addr;
private int age;
public String toString() {
return "User(name=" + this.name + ") ";
}
}
- Method Include하기
/* Lombok */
@ToString(of = {"name"})
public class User {
private String name;
private String addr;
private int birthYear;
@ToString.Include
public int getAge() {
return 2020 - this.birthYear;
}
}
/* JAVA */
public class User {
private String name;
private String addr;
private int birthYear;
public int getAge() {
return 2020 - this.birthYear;
}
public String toString() {
return "User(name=" + this.name + ", getAge=" + this.getAge() + ") ";
}
}
참고자료
http://www.javabyexamples.com/category/libraries/lombok/