[JAVA] Lombok Annotation 정리

1. 시작하며

롬복 어노테이션 사용시에 자꾸 헷갈려서 개인적인 기억 정리 용도로 기록해 두고자 한다.

2. 왜 Lombock을 쓰나?

Getter, Setter, Constructor 등을 자동으로 생성해줘서 귀찮은 일을 줄여 준다. 단, 무한루프에 빠지거나 무분별하게 setter를 남발할 수 있으니 조심해서 쓰자

3. Lombok 설치

maven

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

gradle

 compileOnly 'org.projectlombok:lombok'
 annotationProcessor 'org.projectlombok:lombok'

gradle 5버전 이상은 annotationProcessor 'org.projectlombok:lombok' 을 추가해주어야 한다. 그렇지않으면 아래와 같은 에러가 발생한다.

error: variable name not initialized in the default constructor

4. Lombok Annotation 정리

Spring in Action 에서 공부한 내용을 참고하였다.

https://projectlombok.org/features/all

@NonNull

자동으로 null 체크를 진행하여 null 인 경우 NullPointerException 을 발생 시킨다.

@Cleanup

자동으로 자원을 관리한다. close() 메소드를 호출하여 자원을 종료시킨다.

@Getter, @Setter

getter, setter를 생성해준다.
Entity 클래스 내에서는 Setter를 만들지 않도록 하자. 해당 필드에 변경이 필요하면 그 목적과 의도를 나타낼 수 있는 메소드를 추가해야한다.

public class Order {

  private OrderStatus orderStatus;

  public void cancel() {
      this.setOrderStatus(OrderStatus.CANCEL);
  }
}

public void cancelOrder(Long orderId) {
    Order order = orderRepository.findOne(orderId);
    order.cancel();
}

@ToString

ToString 메소드를 생성 해준다.

@EqualsAndHashCode

hashCode, equals를 구현해준다.

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

  • @NoArgsConstructor
    매개변수가 없는 생성자 구현
  • @RequiredArgsConstructor
    final, @NonNull이 있는 필드가 포함된 생성자를 구현
  • @AllArgsConstructor
    모든 필드를 매개변수로 갖는 생성자를 구현

@Data

@ToString, @EqualsAndHashCode, @Getter on all fields,
and @Setter on all non-final fields,
and @RequiredArgsConstructor!

@Builder

해당 클래스에 빌드 패턴을 적용한 클래스를 생성해준다. 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함된다.

생성자나 빌더나 생성 시점에 값을 채워준다. 그러나 아래와 같은 차이점이 있다.

  • 생성자 : 지금 채워야 하는 필드가 무엇인지 정확히 지정 할 수 없다.
  • 빌더 : 어느 필드에 어떤 값을 채워야 할지 명확히 인지 할 수 잇다.
@Builder
public class Person {
  private String name;
  private int age;
  private Set<String> occupations;
}
Person.builder()
    .name("Adam Savage")
    .city("San Francisco")
    .job("Mythbusters")
    .job("Unchained Reaction")
    .build();

Data, @ToString, @Setter 등의 기능은 성능 또는 객체 안정성 이슈로 인해 주의하여 사용해야한다.

5. 마치며

롬복을 통해 코드량을 줄일 수 있다. 그러나 주의해서 사용해야 한다.

우선 공식문서에 상세한 예제가 많으니 공식 문서부터 확인하자. 그리고 다른 블로그에 더 좋은 설명이 많으니 이를 읽어보자.

참고

 
반응형

댓글

Designed by JB FACTORY