이 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

+ Recent posts