λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Java

[Java] - Project Lombok(둬볡)

by 주발2 2021. 6. 20.
λ°˜μ‘ν˜•

 μ•ˆλ…•ν•˜μ„Έμš”~ 이전에 μš΄μ˜ν•˜λ˜ λΈ”λ‘œκ·Έ 및 GitHub, 곡뢀 λ‚΄μš©μ„ μ •λ¦¬ν•˜λŠ” Study-GitHub κ°€ μžˆμŠ΅λ‹ˆλ‹€!

 λ„€μ΄λ²„ λΈ”λ‘œκ·Έ

 GitHub

Study-GitHub

 πŸ”


πŸ“Ž Lombok(둬볡)

 

μ•ˆλ…•ν•˜μ„Έμš”! μ΄λ²ˆμ— 정리할 λ‚΄μš©μ€ Project Lombok(둬볡) μž…λ‹ˆλ‹€.

Lombok은 Java 라이브러리둜, μžλ°” 개발자라면 λŒ€λΆ€λΆ„ ν•œ λ²ˆμ―€μ€ μ‚¬μš©ν•΄λ³΄μ§€ μ•Šμ•˜μ„κΉŒ ν•˜λŠ” μ •~말 많이 μ‚¬μš©ν•˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

μ € λ˜ν•œ ν‰μ†Œμ— κ°œλ°œμ„ ν•  λ•Œ Lombok 라이브러리 μ—†μ΄λŠ” κ°œλ°œμ„ λͺ» ν•  μ •λ„λ‘œ(?) 많이 μ‚¬μš©μ„ ν•˜λŠ”λ°μš”.. γ…Žγ…Ž

 

이번 μ‹œκ°„μ—λŠ” Lombok μ΄λž€ 무엇인지, μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€μ™€ μž₯단점에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€ :)

 

κ°„λž΅ν•˜κ²Œ λͺ©μ°¨λ₯Ό λ‚˜νƒ€λ‚΄λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€!

  • Lombok μ΄λž€?
  • Lombok μ„€μΉ˜
  • Lombok λ‹€μ–‘ν•œ μ–΄λ…Έν…Œμ΄μ…˜
  • Lombok은 무쑰건 μ’‹μ„κΉŒμš”?

 

 

 

🎯  Lombok μ΄λž€?

λ¨Όμ € Lombok 이 무엇인지 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€!

Lombok의 κ³΅μ‹λ¬Έμ„œμ—λŠ” λ‹€μŒκ³Ό 같이 μ„€λͺ…을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

 

=> Project Lombok은 Java 개발의 속도λ₯Ό 높이고, νŽΈμ§‘κΈ°μ™€ λΉŒλ“œ 도ꡬ에 μžλ™μœΌλ‘œ μ—°κ²°λ˜λŠ” μžλ°” 라이브러리의 ν”ŒλŸ¬κ·ΈμΈμ΄λ‹€.

getterλ‚˜ equals 같은 λ©”μ„œλ“œλ₯Ό λ‹€μ‹œλŠ” μ‚¬μš©ν•˜μ§€ 말아라, 단 ν•˜λ‚˜μ˜ μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ ν΄λž˜μŠ€λŠ” μ™„λ²½ν•œ κΈ°λŠ₯을 가진 λΉŒλ”, λ‘œκΉ… λ³€μˆ˜ μžλ™ν™”, 기타 λ“±λ“±μ˜ κΈ°λŠ₯이 μžˆλ‹€.

 

즉, getter, setter, equals λ“±μ˜ λ©”μ†Œλ“œμ™€ λ™λ“±ν•˜κ²Œ μž‘λ™ν•˜λŠ” κΈ°λŠ₯을 μ–΄λ…Έν…Œμ΄μ…˜λ§ŒμœΌλ‘œ μ μš©ν•  수 μžˆλŠ” κ°•λ ₯ν•œ κΈ°λŠ₯μΈλ°μš”. 

κ°„λ‹¨ν•˜κ²Œ μ½”λ“œλ‘œ μ‚΄νŽ΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

 

(Lombok의 μž‘λ™ 원리에 λŒ€ν•΄ κΆκΈˆν•˜μ‹œλ©΄ μ•„λž˜ μ‚¬μ΄νŠΈλ₯Ό μ°Έμ‘°ν•΄μ£Όμ„Έμš” !)

https://free-strings.blogspot.com/2015/12/lombok.html

 

Lombok은 μ–΄λ–»κ²Œ λ™μž‘λ˜λ‚˜? 간단정리

개인적으둜 κ°œλ°œκ΄€λ ¨ λ‚΄μš©μ„ μ •λ¦¬ν•˜λŠ” μžŠμ§€λ§μž λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

free-strings.blogspot.com

https://docs.oracle.com/javase/8/docs/api/javax/annotation/processing/Processor.html

 

Processor (Java Platform SE 8 )

The interface for an annotation processor. Annotation processing happens in a sequence of rounds. On each round, a processor may be asked to process a subset of the annotations found on the source and class files produced by a prior round. The inputs to th

docs.oracle.com

 

 

 

Lombok 없이 μ‚¬μš©ν•˜λŠ” κΈ°μ‘΄ μžλ°” μ½”λ“œ

public class InflearnModel {

    private Long id;            // PK
    private String imageUrl;    // 썸넀일
    private String title;       // κ°•μ˜ 제λͺ©
    private int price;          // μ •κ°€
    private int salePrice;      // 할인 가격
    private float rating;       // 평점
    private String instructor;  // κ°•μ˜μž
    private String url;         // κ°•μ˜ νŽ˜μ΄μ§€ 링크
    private int viewCount;      // μˆ˜κ°•μž 수
    private String platform;    // ν”Œλž«νΌ 이름
    private int sessionCount;   // κ°•μ˜ μ„Έμ…˜ 개수
    private String currency;    // 원화
    private String description; // κ°•μ˜ λΆ€μ—°μ„€λͺ…
    private String skills;      // κ°•μ˜ μŠ€νƒ

    public Long getId() {
        return id;
    }

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

    public String getImageUrl() {
        return imageUrl;
    }

    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public int getSalePrice() {
        return salePrice;
    }

    public void setSalePrice(int salePrice) {
        this.salePrice = salePrice;
    }

    public float getRating() {
        return rating;
    }

    public void setRating(float rating) {
        this.rating = rating;
    }

    public String getInstructor() {
        return instructor;
    }

    public void setInstructor(String instructor) {
        this.instructor = instructor;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public int getViewCount() {
        return viewCount;
    }

    public void setViewCount(int viewCount) {
        this.viewCount = viewCount;
    }

    public String getPlatform() {
        return platform;
    }

    public void setPlatform(String platform) {
        this.platform = platform;
    }

    public int getSessionCount() {
        return sessionCount;
    }

    public void setSessionCount(int sessionCount) {
        this.sessionCount = sessionCount;
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getSkills() {
        return skills;
    }

    public void setSkills(String skills) {
        this.skills = skills;
    }
    
    ...
}

μœ„ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄λ©΄ λ‹€λ₯Έ κΈ°λŠ₯은 μΌμ ˆμ—†μ΄ ν•„λ“œμ™€ getter, setter λ©”μ†Œλ“œλ§Œ μ‘΄μž¬ν•˜λŠ” ν΄λž˜μŠ€μΈλ°μš”,

ν•„λ“œκ°€ λŠ˜μ–΄λ‚¨μ— 따라 getter, setter λ©”μ†Œλ“œλ„ 같이 μž‘μ„±μ„ ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— 쀑볡 μ½”λ“œκ°€ λ„ˆλ¬΄λ‚˜ λ§Žμ•„μ§€λŠ” 단점이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

(λ¬Όλ‘ , 이런 λ§Žμ€ ν•„λ“œλ₯Ό 가진 클래슀λ₯Ό μƒμ„±ν•˜λŠ” 것은 μ§€μ–‘ν•˜λŠ”κ²Œ μ’‹λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.)

 

μœ„ μ½”λ“œλ§ŒμœΌλ‘œλ„ μΆ©λΆ„νžˆ μž₯ν™©ν•˜κΈ° λ•Œλ¬Έμ— μƒμ„±μžλ‚˜ equals, HashCode, toString λ“±λ“±μ˜ λ©”μ†Œλ“œλŠ” μ œμ™Έν–ˆμŠ΅λ‹ˆλ‹€.

λ¬Όλ‘  InflearnModel 클래슀 μžμ²΄μ— ν•„λ“œκ°€ λ§ŽκΈ°λŠ” ν•˜μ§€λ§Œ, μ „λΆ€ λΉ„μŠ· λΉ„μŠ·ν•œ getter, setter λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•˜λ‹€ λ³΄λ‹ˆ 배보닀 배꼽이 더 컀진(?) 상황이 된 것 κ°™μŠ΅λ‹ˆλ‹€.

 

μœ„μ™€ 같은 μž₯ν™©ν•œ μ½”λ“œμ— Lombok을 μ‚¬μš©ν•˜λ©΄ λ§ˆλ²•κ°™μ€(?) 일이 μΌμ–΄λ‚˜κ²Œ λ©λ‹ˆλ‹€.

 

 

 

Lombok을 μ‚¬μš©ν•œ (λ§ˆλ²•μ˜) μžλ°” μ½”λ“œ

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class InflearnModel {

    private Long id;            // PK
    private String imageUrl;    // 썸넀일
    private String title;       // κ°•μ˜ 제λͺ©
    private int price;          // μ •κ°€
    private int salePrice;      // 할인 가격
    private float rating;       // 평점
    private String instructor;  // κ°•μ˜μž
    private String url;         // κ°•μ˜ νŽ˜μ΄μ§€ 링크
    private int viewCount;      // μˆ˜κ°•μž 수
    private String platform;    // ν”Œλž«νΌ 이름
    private int sessionCount;   // κ°•μ˜ μ„Έμ…˜ 개수
    private String currency;    // 원화
    private String description; // κ°•μ˜ λΆ€μ—°μ„€λͺ…
    private String skills;      // κ°•μ˜ μŠ€νƒ

}

Lombok을 μ‚¬μš©ν•˜κ²Œ 되면 μ½”λ“œκ°€ μ •~~~~~~말 κ°„κ²°ν•΄μ§€λŠ”λ°μš”, 개인적으둜 μžλ°” μ½”λ“œκ°€ μž₯ν™©ν•˜λ‹€κ³  λŠλΌλŠ” 이유 쀑 ν•˜λ‚˜κ°€ μœ„μ™€ 같은 보일러 ν”Œλ ˆμ΄νŠΈ μ½”λ“œμ„±μ˜ getter, setter와 같은 λ©”μ†Œλ“œ λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€.

 

μœ„μ—μ„œ μž‘μ„±ν•œ λͺ¨λ“  getter, setter λ©”μ†Œλ“œλ₯Ό 단 2μ€„μ˜ @Getter, @Setter μ–΄λ…Έν…Œμ΄μ…˜μ„ 톡해 κ°„λž΅ν•˜κ²Œ λ‚˜νƒ€λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

(더 μ‹¬ν”Œν•˜κ²Œ ν•œμ€„λ‘œ λ‚˜νƒ€λ‚΄λ €λ©΄ @Getter @Setter둜 λ‚˜νƒ€λ‚Όμˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€ γ…Žγ…Ž..)

 

그럼 이런 Lombok은 μž₯점만 μžˆλŠ”κ±ΈκΉŒμš”? μ•„λž˜μ—μ„œ μ’€ 더 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€ !

 

 

 

🎯  Lombok μ„€μΉ˜

IntelliJ 기반으둜 Lombok을 μ„€μΉ˜ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€!

(호μ˜₯μ‹œ Eclipseμ—μ„œ Lombok을 μ„€μΉ˜ν•˜μ‹œλŠ” 뢄은 μ—¬κΈ° λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš” !)

 

λ¨Όμ € 라이브러리λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

build.gradle

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'

	//lombok 라이브러리 μΆ”κ°€ μ‹œμž‘
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
	//lombok 라이브러리 μΆ”κ°€ 끝

	testImplementation('org.springframework.boot:spring-boot-starter-test') {
		exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
	}
}

 

 

pom.xml

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
            <scope>provided</scope>
        </dependency>

 

 

Pluginsμ—μ„œ lombok을 κ²€μƒ‰ν•œ ν›„ Lombok 을 μ„€μΉ˜ν•©λ‹ˆλ‹€.

File > Settings > Plugins μ—μ„œ lombok 검색 ν›„ μ„€μΉ˜

 

 

Annotation Processors μ„€μ •

File > Settings > Annotation Processors 검색 ν›„ Enable annotation processing 체크

μœ„ 과정이 λλ‚˜λ©΄ Lombok 을 μ‚¬μš©ν•  수 μžˆλŠ” ν™˜κ²½μ΄ κ΅¬μΆ•λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

🎯  Lombok의 λ‹€μ–‘ν•œ μ–΄λ…Έν…Œμ΄μ…˜

Lombokμ—μ„œ 주둜 μ‚¬μš©ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

@Getter   // getter() λ©”μ†Œλ“œ 
@Setter   // setter() λ©”μ†Œλ“œ
@Builder  // Builder νŒ¨ν„΄
@ToString // Object의 toString() κ΅¬ν˜„ 
@EqualsAndHashCode // Object의 equals() & hashCode() κ΅¬ν˜„
@NoArgsConstructor // λ§€κ°œλ³€μˆ˜ μ—†λŠ” μƒμ„±μž(λ””ν…νŠΈ μƒμ„±μž)
@RequiredArgsConstructor // ν•„μˆ˜ κ°’λ§Œ κ°€μ§€λŠ” μƒμ„±μž
@AllArgsConstructor // λͺ¨λ“  ν•„λ“œλ₯Ό κ°€μ§€λŠ” μƒμ„±μž
@Data // @ToString, @Getter, @Setter, @EqualsAndHashCode, @RequiredArgsConstructor μ–΄λ…Έν…Œμ΄μ…˜μ„ 포함
public class InflearnModel {
    ...

사싀 Lombok의 μ–΄λ…Έν…Œμ΄μ…˜μ˜ 경우 넀이밍이 μž˜λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ—, μ΄λ¦„λ§Œ 보더라도 무슨 κΈ°λŠ₯을 ν•˜λŠ”μ§€ μœ μΆ”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ 😊

특히 @Data μ–΄λ…Έν…Œμ΄μ…˜μ˜ 경우, μœ„μ— μ •μ˜ν•œ @Getter, @Setter, @ToString ... λ“±λ“±μ˜ μ–΄λ…Έν…Œμ΄μ…˜μ„ λͺ¨λ‘ ν¬ν•¨ν•˜κ³  μžˆλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

 

λ‹€μ–‘ν•œ Lombok 의 κΈ°λŠ₯듀을 μ‚΄νŽ΄λ³΄κ³  μ‹ΆμœΌλ©΄ μ•„λž˜ κ³΅μ‹λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€ :)

https://projectlombok.org/features/all

 

Stable

 

projectlombok.org

 

 


🧐 그럼 λ‹€λ₯Έ μ–΄λ…Έν…Œμ΄μ…˜λ“€μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” @Data μ–΄λ…Έν…Œμ΄μ…˜λ§Œ μ‚¬μš©ν•˜λ©΄ λ˜λŠ”κ²Œ μ•„λ‹Œκ°€μš”?

β€» μ•„λž˜λŠ” 제 개인적인 μƒκ°μž…λ‹ˆλ‹€ :)

μ–Έλœ»λ³΄κΈ°μ— @DataλŠ” λ§Žμ€ μ–΄λ…Έν…Œμ΄μ…˜μ„ ν¬ν•¨ν•˜κ³  있기 λ•Œλ¬Έμ— 이 μ–΄λ…Έν…Œμ΄μ…˜μ΄ 만λŠ₯인 것 처럼 λ³΄μ΄μ§€λ§Œ, μ‹€μ œλ‘œλŠ” 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€.

κ·Έλ ‡κ²Œ μƒκ°ν•˜λŠ” μ΄μœ λŠ” @Setter μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ 인해 객체의 λΆˆλ³€μ„±μ„ 보μž₯ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

μ΄νŽ™ν‹°λΈŒ μžλ°” 3/E λ„μ„œμ— λ‹€μŒκ³Ό 같은 λ‚΄μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μ•„μ΄ν…œ 15 - ν΄λž˜μŠ€μ™€ λ©€λ²„μ˜ μ ‘κ·Ό κΆŒν•œμ„ μ΅œμ†Œν™”ν•˜λΌ

μ•„μ΄ν…œ 17- λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ

 

μœ„ μ£Όμ œμ—μ„œ μ–˜κΈ°ν•˜λŠ” λ‚΄μš©μœΌλ‘œ 클래슀λ₯Ό κ°€λŠ₯ν•œ immutable(λΆˆλ³€) ν•˜κ²Œ λ§Œλ“€κ³ ,

λ³€κ²½ κ°€λŠ₯성을 μ΅œμ†Œν™”ν•˜λΌ 라고 μ €μžλŠ” 말을 ν•˜κ³  μžˆλŠ”λ°μš”,

μ±…μ˜ μ•„μ΄ν…œμ—λŠ” λ‹€μŒκ³Ό 같은 λ‚΄μš©λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€.

  • 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€. -> setter() λ©”μ†Œλ“œ λ“±
  • (κ°€λŠ₯ν•œ) λͺ¨λ“  ν•„λ“œλ₯Ό final둜 μ„ μ–Έ
  • λͺ¨λ“  ν•„λ“œλ₯Ό private둜 μ„ μ–Έ

ν•˜μ§€λ§Œ @Data μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜κ²Œ 되면 ν•΄λ‹Ή ν΄λž˜μŠ€μ—λŠ” @Setter μ–΄λ…Έν…Œμ΄μ…˜μ΄ μžλ™μœΌλ‘œ 적용되고,

객체가 λΆˆλ³€μ„ 보μž₯ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή 객체가 λ¬΄λΆ„λ³„ν•˜κ²Œ μˆ˜μ •λ  κ°€λŠ₯성이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

 

λ”°λΌμ„œ ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜(@Data)의 μ‚¬μš©μ€ μ§€μ–‘ν•˜λŠ”κ²Œ μ’‹λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.


 

λ§ˆμ§€λ§‰μœΌλ‘œ Lombok을 무쑰건 μ‚¬μš©ν•˜λŠ”κ²Œ 쒋은지, λ‹€λ₯Έ μ‚¬μ΄λ“œ μ΄νŽ™νŠΈ 등은 μ—†λŠ”μ§€μ— λŒ€ν•΄ κ°„λž΅νžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

(JPAλ₯Ό μ‚¬μš©ν•  경우, μ–‘λ°©ν–₯ κ΄€κ³„μ—μ„œ @ToString μ–΄λ…Έν…Œμ΄μ…˜μ„ μ μš©ν•˜λ©΄ μˆœν™˜μ°Έμ‘°λ‘œ 인해 Stack over flowκ°€ λ°œμƒν•  수 있기 λ•Œλ¬Έμ— μœ μ˜ν•΄μ„œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€)

 

 

 

 

🎯  Lombok은 무쑰건 μ’‹μ„κΉŒμš”?

사싀 이전에 일뢀 κΈ€λ“€κ³Ό λͺ‡λͺ‡ λΆ„λ“€μ—κ²Œ "Lombok의 μ‚¬μš©μ€ μ΅œλŒ€ν•œ μ§€μ–‘ν•˜λΌ" λΌλŠ” λ‚΄μš©μ„ 듀은적이 μžˆμŠ΅λ‹ˆλ‹€.

 

μœ„μ—μ„œ μ •λ¦¬ν•œ λ‚΄μš©λ§Œ λ΄€μ„λ•ŒλŠ” μ½”λ“œλ„ λ‹¨μˆœν•΄μ§€κ³ , 생산성도 λ†’μ•„κ°„λ‹€κ³  λ‚˜μ™€μžˆλŠ”λ° μ™œ μ§€μ–‘ν•˜λΌκ³  ν–ˆμ—ˆμ„κΉŒμš”?

개인적인 μƒκ°μœΌλ‘œλŠ”, Lombok을 잘λͺ» μ‚¬μš©ν•˜κ²Œ 되면 λͺ‡λͺ‡ μ‚¬μ΄λ“œ μ΄νŒ©νŠΈκ°€ 있기 λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€.

λ˜ν•œ λ‹€λ₯Έ λΆ„μ˜ κ°•μ˜μ—μ„œ "Lombok의 λ§ˆλ²•μ€ μ–Έμ  κ°€ λŒ“κ°€λ₯Ό 치루게 λ©λ‹ˆλ‹€." λΌλŠ” κ°•μ˜λ₯Ό 듀은적이 μžˆμŠ΅λ‹ˆλ‹€.

(μ €λŠ” 아직 λ‹€ν–‰νžˆ(?) Lombok μ‚¬μš©μ˜ λŒ“κ°€λ₯Ό μΉ˜λ£¨μ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€..πŸ˜‚)

  • JPAμ—μ„œ μ—°κ΄€κ΄€κ³„μ˜ 엔티티에 @ToString() μ–΄λ…Έν…Œμ΄μ…˜μ„ μ μš©ν•˜κ²Œ 되면 λ¬΄ν•œ μˆœν™˜ μ°Έμ‘° 문제 ..
  • JPAμ—μ„œ 엔티티에 @Getter을 μ μš©ν•˜κ³ , boolean μžλ£Œν˜•μ˜ λ³€μˆ˜λͺ…이 is둜 μ‹œμž‘ν•˜λŠ” 경우(?)
  • μžλ°” <--> μ½”ν‹€λ¦° λ³€ν™˜ 문제(?)

 

μœ„ 2λ²ˆμ§Έμ™€ 3λ²ˆμ§ΈλŠ” 얼핏 λ“€μ–΄λ³΄μ•˜λ˜ λ‚΄μš©μΈμ§€λΌ ν™•μ‹€ν•˜μ§€λŠ” μ•Šμ§€λ§Œ, 기타 Lombok의 κΈ°λŠ₯에 λŒ€ν•΄ μ •ν™•νžˆ μ•Œμ§€ λͺ»ν•œ 체 μ‚¬μš©ν•œλ‹€λ©΄ μœ„μ™€ 같이 μ‚¬μ΄λ“œ μ΄νŽ™νŠΈκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ €λŠ” μ½”λ”© κ²½λ ₯이 μ–Όλ§ˆ μ•ˆλ˜κΈ°μ— Lombok을 μ‚¬μš©ν•˜λ©° λ°œμƒν–ˆλ˜ μ‚¬μ΄λ“œ μ΄νŽ™νŠΈλŠ” μ‘΄μž¬ν•˜μ§€ μ•Šμ§€λ§Œ, κ°œμΈμ μœΌλ‘œλŠ” μ΅œλŒ€ν•œ Lombok을 μ§€μ–‘ν•˜μžκ³  생각은 ν•˜μ§€λ§Œ μ‹€μ œ νŽΈλ¦¬ν•œ μ–΄λ…Έν…Œμ΄μ…˜μ΄ λ„ˆλ¬΄λ‚˜ λ§ŽκΈ°μ— κ°œλ°œμ„ ν•  λ•Œ μ’…μ’… μ‚¬μš©μ„ ν•  것 κ°™μŠ΅λ‹ˆλ‹€ πŸ€”

 

λ¬Όλ‘  좔후에 κ°œλ°œμ„ ν•˜λ©΄μ„œ Lombok으둜 μΈν•œ μ—„μ²­λ‚œ 손해 λΉ„μš©μ„ κ²ͺκ²Œλœλ‹€λ©΄,

κ·Έλ•ŒλŠ” 이 글이 Lombok에 λŒ€ν•œ λΉ„νŒκ³Ό ν•¨κ»˜ μ‚¬μš©μ„ μ§€μ–‘ν•˜λΌκ³  변경될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€ ... πŸ˜‚

 

 

 

Lombok의 μ‚¬μš©μ— λŒ€ν•œ λ‹€λ₯Έ λΆ„λ“€μ˜ μ˜κ²¬μ„ μ’€ 더 ν™•μΈν•΄λ³΄κ³ μ‹ΆμœΌλ©΄ μ•„λž˜ 링크듀을 ν™•μΈν•΄λ³΄μ‹œλ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€!

(μ €λŠ” Lombok을 μ‚¬μš©ν•˜λŠ”κ²Œ νŽΈλ¦¬ν•˜κΈ° λ•Œλ¬Έμ— 링크듀은 λŒ€λΆ€λΆ„ Lombok을 μ‚¬μš©μ„ μ§€μ–‘ν•˜λΌλŠ” ν¬μŠ€νŒ…μ΄ λ§ŽμŠ΅λ‹ˆλ‹€.)

 


μ•„λž˜ 글은 μ—¬λŸ¬ 사둀λ₯Ό 톡해 Lombok의 μ‚¬μš©μ„ μ§€μ–‘ν•˜λΌκ³  λ‚˜μ™€μžˆλŠ” 쒋은 글인것 κ°™μŠ΅λ‹ˆλ‹€.

 

 

 

 

🎯  References

 

λ°˜μ‘ν˜•

λŒ“κΈ€