이 3가지는 생성자를 자동으로 생성해주는 어노테이션이다.
@NoArgsConstructor : 파라미터가 없는 생성자를 생성한다.
주의 :
1. 필드들이 final로 생성되어 있는 경우에는 필드를 초기화 할 수 없기 떄문에, 생성자를 만들 수 없다.
@NoArgsConstructor(force = true)옵션을 이용해서 final필드를 0,false,null등으로 초기화를 강제로 시켜 만들 수 있다.
2. @NonNull같이 필드에 제약조건이 설정되어 있는 경우, 생성자내 null-check로직이 생성되지 않는다.
@RequiredArgsConstructor : 추가 작업을 필요로 하는 필드에 대한 생성장를 생성하는 어노테이션이다.
초기화 되지 않은 모든final필드, @NonNull이 적용되어 있는 모든 필드에 자동적으로 생성자를 생성해 준다.
@NonNull로 마크돼있는 필드들은 null-check가 추가적으로 생성되며, @NonNull이 마크되어 있지만, 파라미터에서 null값이 들어온다면 생성자에서 NullPointerException이 발생한다.
파라미터의 순서는 클래스에 있는 필드 순서에 맞춰서 생성해야 된다.
@AllArgsConstructor : 클래스에 존내하는 모든 필드에 대한 생성자를 자동으로 생성해준다.
만약 필드중에서 @NonNull 애노테이션이 마크되어 있다면 생성자 내에서 null-check 로직을 자동적으로 생성한다.
생성자 관련 애노테이션을 사용할 때 주의사항
1. static 필드들은 스킵
2. 파라미터의 순서는 클래스에 있는 필드 순서에 맞춰서 생성하기 때문에 매우 주의.
→ 만약 클래스 필드의 순서를 바꾸었을 때 롬복이 자동적으로 생성자 파라미터 순서를 바꾸어 주기 때문에 주의하지 않으면 버그가 발생할 수 있다.
3. AccessLevel을 꼭 설정.
→ 세 애노테이션 모두 접근 제한자를 AccessLevel로 설정할 수 있다.
기본값은 public이지만 필요로 따라서 접근제한자를 설정해줘야 한다.
'Back-end > Spring' 카테고리의 다른 글
Entity Mapping(엔티티 매핑) (0) | 2022.04.22 |
---|---|
@Builder (0) | 2021.09.08 |
@Getter, @Setter (0) | 2021.09.07 |