[Spring-library]Lombok이란?

Lombok이란?

Lombok은 자바에서 Model(DTO, VO, Domain Class) 클래스를 작성할 때, 멤버 변수에 대한 Getter/Setter Method, Equals(), hashCode(), ToString()과 멤버 변수에 값을 설정하는 생성자 등등을 @Getter, @Setter 같은 어노테이션을 통해 자동으로 생성해주는 라이브러리 이다.

공식홈페이지

시작하기

라이브러리 의존성 설정

Maven

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

Gradle

1
provided 'org.projectlombok:lombok:1.18.4'

AssertJ 메소드 임포트

1
import lombok.*;

Lombok 어노테이션

@어노테이션 설명 세부기능
@Getter, @Setter Getter, Setter 메소드 자동생성 – AccessLevel : 해당 접근 제한자를 설정
– lazy : 동기화를 이용하여 최초 1회만 호출
@ToString ToString 메소드 자동생성 – exclude : 출력하지 않을 필드명 입력
– includeFieldNames : 필등명 생략 여부 설정
– callSuper : 상위 클래스 toString호출 여부 설정
@EqualsAndHashCode equals, hashcode 메소드 자동생성 – of : 포함 할 필드, – exclude : 제외 할 필드
@Data @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 자동생성
@val equals, hashcode 메소드 자동생성
@NonNull 해당 값이 Null 일경우 NullPointerException을 발생
@Cleanup 자동 리소스 관리 : close() 메소드를 귀찮음 없게 안전하게 호출
@NoArgsConstructor 인자 없는 생성자 생성
@RequriedArgsConstructor 필수 인자만 있는 생성자 생성(다른 생성자가 없을 때에만 만들어짐)
@AllArgsConstructor 모든 인자를 가진 생성자 생성
@Value 불편 클래스를 쉽게 생성
@Builder Builder API 처럼 사용 할 수 있도록 지원
@SneakyThrows Exception 발생시 체크된 Throable로 감싸서 전달
@Synchronized 메소드에서 동기화 Lock을 설정
@Log 종류별 로그를 사용할 수 있도록 한다. – 기본 변수명 : Log (Config 파일 만들어서 명칭 변경 가능)
– 로그 종류 : @Log, @Slf4j, @CommonLog, XSlf4j, JBossLog 등

실제 사용

Lombok 어노테이션을 이용하여 만든 Event Class

1
2
3
4
5
6
7
@Builder @AllArgsConstructor @NoArgsConstructor
@Getter @Setter @EqualsAndHashCode(of="id")
public class Event {

private Integer id;
private String name;
}

실제로 만들어진 .class파일

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.doohong.restapi.event;

public class Event2 {
private Integer id;
private String name;

public static Event2.Event2Builder builder() {
return new Event2.Event2Builder();
}

public Event2(final Integer id, final String name) {
this.id = id;
this.name = name;
}

public Event2() {
}

public Integer getId() {
return this.id;
}

public String getName() {
return this.name;
}

public void setId(final Integer id) {
this.id = id;
}

public void setName(final String name) {
this.name = name;
}

public boolean equals(final Object o) {
if (o == this) {
return true;
} else if (!(o instanceof Event2)) {
return false;
} else {
Event2 other = (Event2)o;
if (!other.canEqual(this)) {
return false;
} else {
Object this$id = this.getId();
Object other$id = other.getId();
if (this$id == null) {
if (other$id != null) {
return false;
}
} else if (!this$id.equals(other$id)) {
return false;
}

return true;
}
}
}

protected boolean canEqual(final Object other) {
return other instanceof Event2;
}

public int hashCode() {
int PRIME = true;
int result = 1;
Object $id = this.getId();
int result = result * 59 + ($id == null ? 43 : $id.hashCode());
return result;
}

public static class Event2Builder {
private Integer id;
private String name;

Event2Builder() {
}

public Event2.Event2Builder id(final Integer id) {
this.id = id;
return this;
}

public Event2.Event2Builder name(final String name) {
this.name = name;
return this;
}

public Event2 build() {
return new Event2(this.id, this.name);
}

public String toString() {
Integer var10000 = this.id;
return this.name;
}
}
}