Book/스프링부트 핵심가이드

lombok 설정 방법과 주요 어노테이션

블로그 주인장 2023. 11. 3.

lombok 사용

반복되는 코드의 작성을 생략할 때 도와주는 어노테이션인 lombok에 대해 알아보겠습니다.


 

lombok


데이터(모델) 클래스를 생성할 때 반복적으로 사용하는 Getter/Setter 같은 메서드를 어노테이션으로 대체하는 기능을 제공하는 라이브러리이다.

 

lombok 의 장점

  1. 어노테이션 기반으로 코드를 자동 생성하므로, 생산성이 높아진다.
  2. 반복되는 코드를 생략할 수 있어서 가독성이 높아진다.
  3. 롬복을 안다면 간단하게 코드를 유추할 수 있어 유지보수에 용이하다.

 

lombok 의 의존성(dependencies) 생성


Maven(pom.xml)

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

Gradle(build.gradle)

dependencies {
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

 

 

lombok 의 plug in 설치


  1. 인텔리제이 IDEA 메뉴 -> [File] -> [Settings] -> [plugins]
  2. Marketplace -> 'lombok' 검색 -> [Installed] 
  3. Setting 창에서 [Build.Execution.Deployment] -> [Complier] -> [Annotation Processors]
  4. [Enable annotation processing] 항목 체크

 

lombok  주요 어노테이션


@Getter, @Setter

  • 클래스에 선언되어 있는 필드에 대한 getter/setter 메서드를 생성한다.
  • @Getter/@Setter 어노테이션을 통해 해당 클래스가 가지고 있는 필드에 대해 각각 getter/setter 메서드가 생성된다.
public class ProductDto {
    private String name;
    private int price;
    private int stock;

    public String getName() {
        return name;
    }

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

    public int getPrice() {
        return price;
    }

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

    public int getStock() {
        return stock;
    }

    public void setStock(int stock) {
        this.stock = stock;
    }
}

 

생성자 자동 생성 어노테이션

  1. NoArgsConstructor : 매개변수가 없는 생성자를 자동 생성한다.
  2. AllArgsConstructor : 모든 필드를 매개변수로 갖는 생성자를 자동 생성한다.
  3. RequiredArgsConstructor : 필드 중 final 이나 @NotNull이 설정된 변수를 매개변수로 갖는 생성자를 자동 생성한다.
public class ProductDto {
    private String name;
    private int price;
    private int stock;

    public ProductDto() {
    }

    public ProductDto(String name, int price, int stock) {
        this.name = name;
        this.price = price;
        this.stock = stock;
    }
}

 

@ToString

  • toString() 메서드를 생성하는 어노테이션이다.
  • 클래스에 @toString()을 적용하면 해당 코드의 toString() 메서드를 생략해도 된다.
public class ProductDto {
    private String name;
    private int price;
    private int stock;

    @Override
    public String toString() {
        return "ProductDto{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", stock=" + stock +
                '}';
    }
}

 

@EqualsAndHashCode

  • 객체의 동등성(Equality)과 동일성(Identity)을 비교하는 연산 메서드를 생성한다.
  • 클래스에 @EqualsAndHashCode()을 적용하면 해당 코드의 equals() 메서드와 hashcode() 메서드를 생략해도 된다.
public class ProductDto {
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ProductDto that = (ProductDto) o;
        return price == that.price && stock == that.stock && Objects.equals(name, that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, price, stock);
    }

    private String name;
    private int price;
    private int stock;
}

 

@Data

  • @Getter/@Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashcode를 모두 포괄하는 어노테이션이다.
@Data
public class ProductDto {
    private String name;
    private int price;
    private int stock;

    @Override
    public String toString() {
        return "ProductDto{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", stock=" + stock +
                '}';
    }
}
반응형

댓글