Spring/Java,Spring

Lombok 이란?

Pazery는ENFJ 2023. 9. 18. 00:24
반응형

Lombok을 왜 쓰냐?

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

Annotaion 정리

  • @NonNull : 자동으로 null 체크를 진행하며 null인 경우 NullpointException 을 발생 시킨다.
  • @Cleanup : 자동으로 자원을 관리한다. close() 메소드를 호출하여 자원을 종료시긴다.
  • @Getter getter 를 생성해준다.
    • lazy : Getter 를 캐시하며, Getter가 CPU가 많이 필요하거나 메모리가 많이 필요한 표현식의 경우 유용 (private final 변수에만 사용 가능, 롬복에서 잠금 처리하여 Thread-safe 일 필요 없다.)
    • onMethod_ = {@어노테이션, …} : 생성되는 메소드에 어노테이션 추가
    • value : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
  • @Setter : setter 를 생성해준다. Entity 클래스 내에서는 Setter를 만들지 않도록 하자. 해당 필드에 변경이 필요하면 그 목적과 의도를 나타낼 수 있는 메소드를 추가 해야한다.
    • onParam_ = {@어노테이션, …} : Setter의 매개 변수에 어노테이션 추가
    • onMethod_ = {@어노테이션, …} : 생성되는 메소드에 어노테이션 추가
    • value : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
    public class Order {
    	private OrderStatus orderstatud;
    
    	public void cancel() {
    		this.setOrderStatus(OrderStatus.CANCEL);
    	}
    }
    
    public void cancelOrder (Long orderId) {
    	Order order = orderRepository.findOne(orderId);
    	order.cancel();
    }
    
  • @ToString : ToString 메소드를 생성해준다.
    • includeFieldNames : 이름-값 쌍으로 표현할지 값만 표현할지 여부
    • of : 포함할 필드 설정
    • exclude : 제외할 필드 설정
    • callSuper : 슈퍼 클래스의 toString메소드 출력을 포함시킬지 여부
    • doNotNuseGetters : toString 메소드 구현에 Getter 메소드를 사용하지 않고 this를 사용할지 여부
    • onlyExplicitlyIncluded : 필드에 설정된 @ToString.Include 또는 @ToString.Exclude를 적용시킨다.
  • @EqualsAndHashCode : hashCode, equals 를 구현해 준다.
    • callSuper 속성을 통해 메소드 자동 생성 시 부모 클래스의 필드까지 포함할지 말지에 대해서 설정할 수 있다. (default 는 false 값)
    • cacheStrategy : hashCode 의 호출 결과를 캐시하여 이후 호출에 사용할지 여부
    • of : 포함할 필드 설정
    • exclude : 제외할 필드 설정
    • donetuseGetters : toString 메소드 구현에 Getter 메소드를 사용하지 않고 this를 사용할지 여부
    • onlyExplicitlyIncluded : 필드에 설정된 @EqualsAndHashCode.Include 또는 @EqualsAndHashCode.Exlcude 를 적용시킨다.
    • @EqualsAndHashCode(callSuper = true) public class Order extends domain { }
  • @NoArgsContructor, @RequiredArgsConstructor, @AllArgsConstructor
    • @NoArgsContructor : 매개변수가 없는 생성자 구현
      • force : final 필드가 존재할 때 이를 null 또는 0 으로 초기화해 기본 생성자를 만들 수 있게 한다.
      • access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
      • onConstructor_ = {@어노테이션, …} : 생성된 생성자에 어노테이션 추가
      • staticName : 해당 생성자를 사용하는 static 생성자를 추가
      public Order (){}
      
    • @RequiredArgsConstructor : final, @NonNull이 있는 필두가 포함된 생성자를 구현
      • access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
      • onConstructor_ = {@어노테이션, …} : 생성된 생성자에 어노테이션 추가
      • staticName : 해당 생성자를 사용하는 static 생성자를 추가
    • @AllArgsConstructor : 클래스의 모든 필드를 매개변수로 갖는 생성자를 구현
      • access : 생성되는 메소드의 접근제어자 설정 (AccessLevel)
      • onContructor_ = {@어노테이션, …} : 생성된 생성자에 어노테이션 추가
      • staticName : 해당 생성자를 사용하는 static 생성자를 추가
  • @Data
    • @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 를 포함
  • @Builder
    • 해당 클래스에 빌드 패턴을 적용한 클래스를 생성해준다. 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함된다. 생성자나 빌더가 생성 시점에 값을 채워준다. 그러나 아래와 같은 차이점이 있다.
      • 생성자 : 지금 채워야 하는 필드가 무엇인지 정확히 지정 할 수 없다.
      • 빌더 : 어느 필드에 어떤 값을 채워야 할지 명확히 인지할 수 있다.
      @Builder
      public class Person {
      	private String name;
      	private int age;
      	private Set<String> occupations;
      }
      
      Person.builder()
      	.name("aa")
      	.city("aa")
      	.job("aa")
      	.job("bb")
      	.build();
      
💡 Data, ToString, Setter 등의 기능은 성능 또는 객체 안정성 이슈로 인해 주의하여 사용해야 한다.

참고사이트

[JAVA] Lombok Annotation 정리

Java - Lombok 자주 쓰는 어노테이션 정리

Lombok 어노테이션 정리

반응형