Search

Lombok

Lombok

Lombok은 Java κ°œλ°œμ—μ„œ 반볡적인 μ½”λ“œ μž‘μ„±μ„ μ€„μ—¬μ£ΌλŠ” λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. Getter, Setter, Constructor 등을 μžλ™μœΌλ‘œ 생성해주어 개발 생산성을 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

Lombok μ„€μΉ˜ν•˜κΈ°

λΉŒλ“œλ„κ΅¬λ₯Ό μ‚¬μš©ν•˜λ©΄ lombok μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•˜λ©΄ μ‚¬μš©ν•  수 μžˆλ‹€. λΉŒλ“œλ„κ΅¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, Lombok 라이브러리λ₯Ό λ‹€μš΄λ‘œλ“œ λ°›μ•„μ„œ ν”„λ‘œμ νŠΈμ— μΆ”κ°€ν•΄μ•Ό ν•œλ‹€.
Eclipse 의 경우, Lombok 라이브러리λ₯Ό Build Path 에 라이브러리λ₯Ό μΆ”κ°€ν•΄μ£Όκ³  λ³„λ„λ‘œ Lombok을 μ„€μΉ˜ν•΄μ„œ 이클립슀 경둜λ₯Ό 지정해 μ£Όμ–΄μ•Ό ν•œλ‹€.
VS CODE 의 경우, ν”„λ‘œμ νŠΈ 폴더 μ•„λž˜ lib 폴더에 라이브러리 νŒŒμΌμ„ μΆ”κ°€ν•˜λ©° μΈμ‹λœλ‹€.
1.
λ‹€μš΄λ‘œλ“œ
2.
둬볡 라이브러리 μ„€μΉ˜
3.
ν”„λ‘œμ νŠΈμ— μΆ”κ°€

λ‹€μš΄λ‘œλ“œ

.jar ν™•μž₯μžκ°€ μ••μΆ• ν”„λ‘œκ·Έλž¨ ν™•μž₯자둜 μΈμ‹λ˜μ–΄μ„œ μ••μΆ•νŒŒμΌλ‘œ μΈμ‹λ˜λŠ” κ²½μš°λŠ” CMD μ—μ„œ μžλ°” μ‹€ν–‰ λͺ…λ Ήμ–΄λ‘œ μ‹€ν–‰ν•˜λ©΄ λœλ‹€.
java - jar lombok.jar
Bash
볡사

둬볡 라이브러리 μ„€μΉ˜

[Specify location…] λ²„νŠΌμ„ ν΄λ¦­ν•˜κ³  Eclipse μ‹€ν–‰ νŒŒμΌμ„ μ°Ύμ•„μ„œ 지정해쀀닀.
Eclipse.exe νŒŒμΌμ„ μ„ νƒν•œλ‹€
[Install / Update] λ²„νŠΌμ„ λˆŒλŸ¬μ„œ μ„€μΉ˜λ₯Ό 진행해쀀닀.
μ„€μΉ˜κ°€ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
μ„€μΉ˜κ°€ μ™„λ£Œκ°€ 되면 이클립슀 μ‹€ν–‰ 파일이 μžˆλŠ” 곳에 Lombok.jar 라이브러리 파일이 λ³΅μ‚¬λ˜κ³  eclipse.ini νŒŒμΌμ— μ„€μ • μ½”λ“œκ°€ μΆ”κ°€λ©λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈμ— μΆ”κ°€

β€’
Eclipse
β€’
VS CODE

Eclipse

ν”„λ‘œμ νŠΈμ— λΉŒλ“œ νŒ¨μŠ€μ— 라이브러리 νŒŒμΌμ„ μ„ νƒν•΄μ„œ μΆ”κ°€ν•΄ μ€λ‹ˆλ‹€.
1.
ν”„λ‘œμ νŠΈ 우클릭
2.
Build Path
a.
Configure Build Path
b.
Libraries νƒ­
3.
Add JARs… λ˜λŠ” Add External JARs…
a.
Add JARs
i.
ν”„λ‘œμ νŠΈ 내뢀에 μžˆλŠ” 라이브러리 νŒŒμΌμ„ μΆ”κ°€ν•˜λŠ” 방법
1.
ν”„λ‘œμ νŠΈ 내에 lib 폴더 생성
2.
μ‚¬μš©ν•  라이브러리 파일 볡사
3.
라이브러리 파일 선택
b.
Add External JARs
i.
ν”„λ‘œμ νŠΈ μ™ΈλΆ€ κ²½λ‘œμ— μžˆλŠ” 라이브러리 νŒŒμΌμ„ μΆ”κ°€ν•˜λŠ” 방법
1.
라이브러리 파일 선택

VS CODE

vscode μ—μ„œλŠ” Java ν”„λ‘œμ νŠΈ μ•„λž˜μ˜ lib폴더에 라이브러리 νŒŒμΌμ„ μΆ”κ°€ν•˜λ©΄ ν”„λ‘œμ νŠΈμ— λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μΆ”κ°€λ©λ‹ˆλ‹€.

Lombok μ‚¬μš©ν•˜κΈ°

Lombook κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 방법을 μ•Œμ•„λ΄…λ‹ˆλ‹€.
Lombok 은 μ–΄λ…Έν…Œμ΄μ…˜ (@) 을 μ‚¬μš©ν•΄μ„œ κΈ°λŠ₯을 μ μš©ν•©λ‹ˆλ‹€.
μ–΄λ…Έν…Œμ΄μ…˜
μ„€λͺ…
@Data
@Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 포함
@Getter
λͺ¨λ“  ν•„λ“œμ˜ getter λ©”μ„œλ“œλ₯Ό μžλ™ 생성
@Setter
λͺ¨λ“  ν•„λ“œμ˜ setter λ©”μ„œλ“œλ₯Ό μžλ™ 생성 (클래슀 레벨 적용 μ‹œ λͺ¨λ“  ν•„λ“œμ— 적용)
@ToString
λͺ¨λ“  ν•„λ“œλ₯Ό ν¬ν•¨ν•œ toString() λ©”μ„œλ“œ μžλ™ 생성
@EqualsAndHashCode
equals() 및 hashCode() λ©”μ„œλ“œ μžλ™ 생성
@NoArgsConstructor
λ§€κ°œλ³€μˆ˜ μ—†λŠ” κΈ°λ³Έ μƒμ„±μž μžλ™ 생성
@AllArgsConstructor
λͺ¨λ“  ν•„λ“œλ₯Ό ν¬ν•¨ν•œ μƒμ„±μž μžλ™ 생성
@RequiredArgsConstructor
final λ˜λŠ” @NonNull ν•„λ“œλ§Œ ν¬ν•¨ν•˜λŠ” μƒμ„±μž μžλ™ 생성
@Value
@Data와 μœ μ‚¬ν•˜μ§€λ§Œ λΆˆλ³€ 객체(immutable object) 생성 (final ν•„λ“œ 적용)
@Builder
λΉŒλ” νŒ¨ν„΄μ„ μ μš©ν•˜μ—¬ 객체 생성 방식 제곡
@Singular
@Builder μ‚¬μš© μ‹œ μ»¬λ ‰μ…˜(List, Set, Map) ν•„λ“œλ₯Ό κ°œλ³„μ μœΌλ‘œ μΆ”κ°€ κ°€λŠ₯
@Slf4j
private static final Logger log ν•„λ“œ μžλ™ 생성 (Slf4j 둜거 μ‚¬μš©)
@Log
Java κΈ°λ³Έ λ‘œκΉ…(java.util.logging.Logger) μ‚¬μš©
@Cleanup
AutoCloseable을 κ΅¬ν˜„ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μžλ™μœΌλ‘œ λ‹«μ•„μ€Œ (try-with-resources λŒ€μ²΄)
@SneakyThrows
try-catch 없이 μ˜ˆμ™Έλ₯Ό 던질 수 μžˆλ„λ‘ 처리

μ˜ˆμ‹œμ½”λ“œ

β€’
Lombok μ‚¬μš©ν•˜μ§€ μ•Šμ€ μ½”λ“œ
β€’
Lombok μ μš©ν•œ μ½”λ“œ

Lombok μ‚¬μš©ν•˜μ§€ μ•Šμ€ μ½”λ“œ

/** * κ²Œμ‹œκΈ€ 정보 * - κ²Œμ‹œκΈ€ 번호 * - 제λͺ© * - μž‘μ„±μž * - λ‚΄μš© * - λ“±λ‘μΌμž * - μˆ˜μ •μΌμž */ public class Board { // 멀버 λ³€μˆ˜ (ν•„λ“œ) private int no; private String title; private String writer; private String content; private String createdAt; private String updatedAt; // κΈ°λ³Έ μƒμ„±μž public Board() { this("제λͺ©μ—†μŒ", "μž‘μ„±μžμ—†μŒ", "λ‚΄μš©μ—†μŒ"); } // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μž - title, writer, content public Board(String title, String writer, String content) { this.title = title; this.writer = writer; this.content = content; } // 전체 λ§€κ°œλ³€μˆ˜ μƒμ„±μž public Board(int no, String title, String writer, String content, String createdAt, String updatedAt) { this.no = no; this.title = title; this.writer = writer; this.content = content; this.createdAt = createdAt; this.updatedAt = updatedAt; } // getter, setter 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 getWriter() { return writer; } public void setWriter(String writer) { this.writer = writer; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getCreatedAt() { return createdAt; } public void setCreatedAt(String createdAt) { this.createdAt = createdAt; } public String getUpdatedAt() { return updatedAt; } public void setUpdatedAt(String updatedAt) { this.updatedAt = updatedAt; } // toString @Override public String toString() { return "Board [no=" + no + ", title=" + title + ", writer=" + writer + ", content=" + content + ", createdAt=" + createdAt + ", updatedAt=" + updatedAt + "]"; } }
Java
볡사

Lombok μ μš©ν•œ μ½”λ“œ

// @Data // @Data μ–΄λ…Έν…Œμ΄μ…˜μ€ μ•„λž˜ μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ λŒ€μ²΄ κ°€λŠ₯ @NoArgsConstructor // κΈ°λ³Έ μƒμ„±μž μžλ™ 생성 @AllArgsConstructor // λͺ¨λ“  ν•„λ“œλ₯Ό ν¬ν•¨ν•œ μƒμ„±μž μžλ™ 생성 @RequiredArgsConstructor // @NonNull λ˜λŠ” final ν•„λ“œλ₯Ό ν¬ν•¨ν•˜λŠ” μƒμ„±μž μžλ™ 생성 @Getter // λͺ¨λ“  ν•„λ“œμ˜ getter μžλ™ 생성 @Setter // λͺ¨λ“  ν•„λ“œμ˜ setter μžλ™ 생성 @ToString // toString() μžλ™ 생성 @EqualsAndHashCode // equals(), hashCode() μžλ™ 생성 public class Board { // 멀버 λ³€μˆ˜ (ν•„λ“œ) private int no; private String title; private String writer; private String content; private String createdAt; private String updatedAt; }
Java
볡사

@RequiredArgsConstructor μ‚¬μš©ν•˜κΈ°

/** * κ²Œμ‹œκΈ€ 정보 * - κ²Œμ‹œκΈ€ 번호 * - 제λͺ© * - μž‘μ„±μž * - λ‚΄μš© * - λ“±λ‘μΌμž * - μˆ˜μ •μΌμž */ @Getter @Setter @ToString @RequiredArgsConstructor @NoArgsConstructor @AllArgsConstructor public class Board { private int no; /** 제λͺ© (ν•„μˆ˜) */ @NonNull private String title; /** μž‘μ„±μž (ν•„μˆ˜) */ @NonNull private String writer; /** λ‚΄μš© (ν•„μˆ˜) */ @NonNull private String content; private String createdAt; private String updatedAt; }
Java
볡사

Lombok 으둜 λΉŒλ” νŒ¨ν„΄ μ μš©ν•˜κΈ°

import lombok.*; /** * κ²Œμ‹œκΈ€ 정보 * - κ²Œμ‹œκΈ€ 번호 * - 제λͺ© * - μž‘μ„±μž * - λ‚΄μš© * - λ“±λ‘μΌμž * - μˆ˜μ •μΌμž */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class Board { private int no; /** 제λͺ© (ν•„μˆ˜) */ @NonNull private String title; /** μž‘μ„±μž (ν•„μˆ˜) */ @NonNull private String writer; /** λ‚΄μš© (ν•„μˆ˜) */ @NonNull private String content; private String createdAt; private String updatedAt; }
Java
볡사
β€’
λΉŒλ” νŒ¨ν„΄μœΌλ‘œ 생성
public class Main { public static void main(String[] args) { // Builder νŒ¨ν„΄μ„ μ΄μš©ν•œ 객체 생성 Board board = Board.builder() .no(1) .title("제λͺ© 예제") .writer("μž‘μ„±μž 예제") .content("λ‚΄μš© 예제") .createdAt("2025-03-24") .updatedAt("2025-03-24") .build(); System.out.println(board); } }
Java
볡사