Lombok 라이브러리

ToC

Why Lombok?

VO를 작성할 때면, 거의 생각하지 않고 반복적으로 작성하는 코드가 있다. getter(), Setter(), ToString() 그리고 생성자이다.

VO에 정의된 필드가 많을수록 코드에 대한 가독성이 떨어질수밖에 없다. 필드 개수의 2배수만큼의 메서드 (Getter/Setter)를 생성하기 때문에 다른 메서드가 있는지 확인하려면 스크롤해서 내려가야 한다.

그러나 Lombok 라이브러리를 사용하면, Getter, Setter 메서드로 코드를 어지럽게 작성할 필요도, 생성자를 작성할 필요도 없다. 딱 필드만 남게되므로 오히려 코드의 가독성이 높아진다.

How can be change?

Lombok을 적용하기 전과 Lombok을 적용한 이후 어떻게 달라지는지 확인해보자.

Before Lombok

임의로 만들어본 VO 객체이다. 게시판을 만든다고 생각하고 게시판에 필요한 6개의 필드를 작성했으며, 이 필드를 사용하는 Getter(), Setter(), toString(), 생성자를 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.devandy.web.domain.vo;

public class Domain {

private int no;
private String title;
private String author;
private String createdDate;
private String updatedDate;
private int hit;

public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getCreatedDate() {
return createdDate;
}
public void setCreatedDate(String createdDate) {
this.createdDate = createdDate;
}
public String getUpdatedDate() {
return updatedDate;
}
public void setUpdatedDate(String updatedDate) {
this.updatedDate = updatedDate;
}
public int getHit() {
return hit;
}
public void setHit(int hit) {
this.hit = hit;
}

@Override
public String toString() {
return "Domain [no=" + no + ", title=" + title +
", author=" + author + ", createdDate=" + createdDate +
", updatedDate=" + updatedDate + ", hit=" + hit + "]";
}

public Domain(int no, String title,
String author, String createdDate,
String updatedDate, int hit) {
super();
this.no = no;
this.title = title;
this.author = author;
this.createdDate = createdDate;
this.updatedDate = updatedDate;
this.hit = hit;
}
}

4가지 기능(Getter, Setter, toString, 생성자)을 추가했을 뿐인데, 코드가 엄~청 길어졌다..
이제 Lombok을 적용해보자.

After Lombok

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.devandy.web.domain.vo;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@ToString
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
public class Domain {
private int no;
private String title;
private String author;
private String createdDate;
private String updatedDate;
private int hit;
}

코드가 획기적으로 줄어들었다! 무엇보다 좋은건 이 VO 객체가 하는 행동(?)을 직관적으로 명확하게 이해할 수 있다는 점이다.

이 Domain 이라는 VO 객체는 toString()getter(), setter() 를 가지고 있으며, 인자값이 없는 기본생성자와 모든 필드를 인자값으로 갖는 생성자를 각각 갖는 VO라는 사실을 어노테이션 만으로 알 수 있다.
Lombok에서 사용하는 어노테이션에 대한 설명은 아래에 정리해두었다.

Lombok을 사용하기 전보다 Lombok을 사용한 이후에 VO 객체가 더 직관적으로 바뀌었으므로 왠만하면 Lombok을 사용해야 할 것 같다.


Lombok Annotations

@ToString

자동으로 ToString() 를 사용할 수 있는 어노테이션이다.

@Getter and @Setter

자동으로 getter(), setter() 를 사용할 수 있는 어노테이션이다.

@NoArgsConstructor

인자값이 없는 기본 생성자를 사용할 수 있는 어노테이션이다.

@AllArgsConstructor

VO 객체에 있는 모든 필드를 인자로 받는 생성자를 사용할 수 있는 어노테이션이다.

@Data

@ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 를 모두 자동으로 사용할 수 있는 어노테이션이다.


How to use?

메이븐 프로젝트의 경우, pom.xml에 dependency를 추가하면 Lombok을 사용할 수 있다.

1
2
3
4
5
6
7
8
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
</dependencies>

그러나 VO 객체에서 Lombok 어노테이션을 추가했음에도 불구하고, DAO나 다른 곳에서 VO 데이터를 사용하지 못하기도 하다.

getNo(), getTitle() 등의 메서드를 VO 외부에서 사용했을때 불러오지 못하는 경우를 말한다.

이 땐 운영체제에 lombok.jar를 직접 설치해서 컴파일하고, Lombok을 사용중인 프로젝트의 IDE 환경에서도 lombok을 설치해주어야 한다.

이 방법은 Lombok 공식 홈페이지에서 각각의 환경에서 어떻게 Lombok을 설치하는지 확인할 수 있다.

아래는 STS(Spring Suite Tools 4.4.8)에 맞춰서 설명을 해보았다.

  1. Lombok 홈페이지에서 lombok.jar 를 설치한다.

  2. 다운받은 디렉토리에서 터미널을 실행하여 lombok.jar를 실행한다.

    1
    java -jar lombok.jar
  3. STS의 검색창에서 [Install New Software..]를 실행한다.

  4. Work with 라고 적힌 blank에 설치할 라이브러리의 저장소 주소를 입력한다. Lombok은 https://projectlombok.org/p2 를입력하면된다.

  5. 위의 이미지처럼 주소를 정상적으로 입력했다면, 아래에 Lombok 라이브러리가 검색되는걸 확인할 수 있다. 체크박스를 체크하고 install 한다.

  6. STS를 종료하고 다시 실행하면, Lombok 어노테이션이 작동된다!