본문 바로가기

Spring

롬복 어노테이션과 사용시 주의할 점

- 이 글에서는 대표적으로 많이 사용하는 롬복 어노테이션과 사용 시 주의할 점을 알아보겠습니다.

 

1) 롬복 어노테이션

(1) @Builder

-  @Builder는 클래스를 위한 복잡한 빌더 API를 만듭니다. 

   @Builder는 예를 들어, 다음과 같은 코드를 만들어줍니다. 

Person.builder()
	.name("Adam Savage")
	.city("San Francisco")
	.job("Mythbusters")
	.job("Unchained Reaction")
	.build();

- @Builder는 클래스, 생성자 혹은 메소드 레벨에 위치할 수 있습니다.
  일반적으로는 생성자 혹은 메소드 레벨에 위치합니다. 

 

(2) @AllArgsConstructor

- @AllArgsConstructor는 모든 필드 값을 파라미터로 받는 생성자를 만듭니다. 

  이 때, @NonNull이 있는 필드가 있다면, 널 체크를 진행합니다. 

 

(3) @RequiredArgsConstructor

- @RequiredArgsConstructor는 final 혹은 @NonNull인 필드값만 파라미터로 받는 생성자를 만듭니다. 

   

(4) @NoArgsConstructor

@NoArgsConstructor는 파라미터가 없는 기본 생성자를 만듭니다. 

 

(5) @NonNull

- @NonNull은 Null을 허용하지 않는 필드나 메소드, 생성자에 사용됩니다. 

  @NonNull을 사용하면    

 

(6) @Getter

@Getter는 기본 getter 메소드를 자동으로 생성해줍니다. 

 

(7) @Setter

- @Setter는 기본 setter 메소드를 자동으로 생성해줍니다. 

 

 

2) 롬복 어노테이션 사용시 주의할 점

(1) @Builder와 @NoArgsConstructor를 같이 사용하면 에러가 발생

- @Builder와 @NoArgsConstructor를 같이 사용하면 컴파일 시 에러가 발생합니다.

// @Getter @Setter @EqualsAndHashCode 등등
@Builder
@NoArgsConstructor
public class MyName {
    private String first;
    private String last;
}
Error:(7, 1) java: constructor MyName in class kr.leocat.test.MyName cannot be applied to given types;
  required: no arguments
  found: java.lang.String,java.lang.String
  reason: actual and formal argument lists differ in length

 

- 이에 대한 해결책은 @AllArgsConstructor를 사용하거나, 모든 필드를 갖는 생성자를 직접 만들어주는 것입니다.  

 

 

(2) @AllArgsConstructor를 사용할 때 주의할 점

- @AllArgsConstructor를 선언했을 때, 두 개의 같은 타입의 인스턴스 멤버의 순서를 바꾸면,

  두 필드가 동일 타입이기 때문에 기존 소스에도 오류 없이 동작하지만,

  실제로는 입력된 값이 바뀌어 들어가는 상황이 발생합니다. 

 

(3) @NoArgsConstructor를 사용할 때 주의할 점 

- 필드들이 final로 선언되어 있는 경우, 필드를 초기화할 수 없기 때문에,

  생성자를 만들 수 없고, 에러가 발생합니다. 

- @NonNull과 같이 필드에 제약 조건이 설정되어 있는 경우,

  추후 초기화를 진행하기 전까지 생성자 내 null check 로직이 실행되지 않습니다.  

 

(4) @Builder를 사용할 때 주의할 점

- @Builder를 사용하면 객체 생성이 명확해지는데,

  가급적 클래스보다는 직접 만든 생성자나 static 객체 생성 메서드에 붙이는 것이 권장됩니다. 

 

참고

@Builder (projectlombok.org)    

@Getter and @Setter (projectlombok.org)

IT 삽질 :: [Lombok] @NoArgsConstructor , @AllArgsConstructor , @RequiredArgsConstructor (tistory.com)  

[Lombok] @Builder와 @NoArgsConstructor 함께 사용하기 (leocat.kr)

'Spring' 카테고리의 다른 글

의존성 역전하기와 육각형 아키텍쳐  (0) 2022.09.10
롬복  (0) 2022.08.21
의존관계 자동 주입  (0) 2022.08.21
컴포넌트 스캔  (0) 2022.08.19
웹 서버와 WAS  (0) 2022.08.14