- 이 글에서는 대표적으로 많이 사용하는 롬복 어노테이션과 사용 시 주의할 점을 알아보겠습니다.
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 객체 생성 메서드에 붙이는 것이 권장됩니다.
참고
@Getter and @Setter (projectlombok.org)
IT 삽질 :: [Lombok] @NoArgsConstructor , @AllArgsConstructor , @RequiredArgsConstructor (tistory.com)
'Spring' 카테고리의 다른 글
의존성 역전하기와 육각형 아키텍쳐 (0) | 2022.09.10 |
---|---|
롬복 (0) | 2022.08.21 |
의존관계 자동 주입 (0) | 2022.08.21 |
컴포넌트 스캔 (0) | 2022.08.19 |
웹 서버와 WAS (0) | 2022.08.14 |