[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