본문 바로가기
경력

[Lombok]반드시 알고써야하는 어노테이션

by devebucks 2020. 7. 12.
728x90

Lombok 어노테이션들을 알아보겠습니다.

참고 : https://projectlombok.org/features/all

@Data

어노테이션은 @ToString, @EqualsAndHashCode, @Getter, @Setter(non-final field) 그리고 @RequiredArgsConstructor를 합해 놓은 단축 어노테이션이다.

 

@ToString

Java에서 toString() 메소드는 java.lang 클래스에서 기본적으로 제공하는 메서드입니다. toString()메서드를 오버라이딩해서 사용하는 경우가 많은데, 사용 예를 보면 다음과 같습니다.

/*참조 : https://projectlombok.org/features/ToString*/
import java.util.Arrays;
public class ToStringExample {
  private static final int STATIC_VAR = 10;
  private String name;
  private Shape shape = new Square(5, 10);
  private String[] tags;
  private int id;
  
  public String getName() {
    return this.name;
  }
  
  public static class Square extends Shape {
    private final int width, height;
    
    public Square(int width, int height) {
      this.width = width;
      this.height = height;
    }
    
    @Override public String toString() {
      return "Square(super=" + super.toString() + ", width=" + this.width + ", height=" + this.height + ")";
    }
  }
  
  @Override public String toString() {
    return "ToStringExample(" + this.getName() + ", " + this.shape + ", " + Arrays.deepToString(this.tags) + ")";
  }
}

이와 같이 override를 통해서 toString()메서드를 제정의해주는 이 부분을 @ToString이 대신해줍니다. 사용 예는 다음과 같습니다. 디버그하기 위해서 toString()메서드를 재정의하지 않고, @ToString을 통해서 값을 바로 확인할 수 있습니다.

/*참조 : https://projectlombok.org/features/ToString*/
import lombok.ToString;

@ToString
public class ToStringExample {
  private static final int STATIC_VAR = 10;
  private String name;
  private Shape shape = new Square(5, 10);
  private String[] tags;
  @ToString.Exclude private int id;
  
  public String getName() {
    return this.name;
  }
  
  @ToString(callSuper=true, includeFieldNames=true)
  public static class Square extends Shape {
    private final int width, height;
    
    public Square(int width, int height) {
      this.width = width;
      this.height = height;
    }
  }
}

 

@EqualsAndHashCode

Hashcode랑 equals구현체를 쉽게 구현할 수 있게 해주는 어노테이션입니다.

 

@NoArgsConstructor

Generates constructors that take no arguments

생성자에 어떤 필드도 존재하지 않는 생성자를 자동생성해 줍니다.

With Lombok Vanilla Java

 

@RequiredArgsConstructor

Generates constructors that take one argument per final / non-null field

클래스에 final이나 @NonNull 어노테이션으로 잡힌 멤버필드를 대상으로만 생성자를 만듭니다.

With Lombok Vanilla Java

 

@AllArgsConstructor

Generates constructors that take one argument for every field.

클래스의 모든 멤버필드를 생성자의 매개변수로 생성자를 자동 생성합니다.

With Lombok Vanilla Java

 

@Builder

클래스에 @Builder를 사용할 경우, @AllArgsConstructor와 같은 기능으로, 모든 멤버 필드에 대해서 매개변수를 받는 기본 생성자를 만듭니다. 

객체를 생성할 때, 받지 않아도 될 매개변수들이 잡히게 되서 불안전한 객체생성이 되버립니다. 생성자메서드 위에 @Builder를 선언하는 것이 좋습니다.

 

728x90

댓글