Java&Spring/Spring

@RequiredArgsConsructor ,@NoArgsConstructor , @AllArgsConstructor

sung.hyun.1204 2023. 2. 15. 18:13

지난 블로그 

https://chosunghyun18.tistory.com/76

 

@RequiredArgsConstructor, @NotNull, @Valid ,@NotBlank

어노테이션들을 항상 정리하고 외우지만, 기억 보다는 기억을 이라는 말이 있다. 정리를 한번 하고 가자. 1. 생성자의 활용 Class 의 기본 전제는 객체를 사용하는데 있어 생성자가 필연적이다 라

chosunghyun18.tistory.com

 

Lombok을 사용하면 생성자를 자동으로 생성할 수 있다.

 

지난 블로그에서 이미 우리는 하나의 클라스에 여러개의 생성자를 만들 수가 있다라고 이야기를 했다.

 

어노테이션 정리를 먼저 하자.

 

@NoArgsConstructor 

파라미터가 없는 기본 생성자를 생성한다.

 

@AllArgsConstructor 

모든 필드 값을 파라미터로 받는 생성자를 만들어준다.

 

@RequiredArgsConstructor :

final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어준다.

 

 

 

예시가 있어 가져와 봤다.

다음 코드의 각각의 어노테이션을 보고 객체를 생성할 수 있는 방식을 유추 해보자

@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class User {
  private Long id;
  @NonNull
  private String username;
  @NonNull
  private String password;
  private int[] scores;
}

 

User user1 = new User();
User user2 = new User("dale", "1234");
User user3 = new User(1L, "dale", "1234", null);

 

@Getter
@NoArgsConstructor
@RequiredArgsConstructor
public static class PrivateTodoPostRequestDto
{
    private String task;

    @NotNull
    private LocalDate date;
}

하지만,  @NoArgsConstructor , @RequiredArgsConstructor을 순차적으로 적어 줄시 생성자 중복 에러가 난다.

 

@Data
@NoArgsConstructor
public static class PrivateTodoPostRequestDto
{
    private String task;

    @NotNull
    private LocalDate date;
}

다음과 같이 적어주자. 추가로 옵션을 적어주지 않으면 final 필드 선언시 컴파일 에러가 발생 한다.

-> @NoArgsConstructor (force = true)  와 같이 적어 final 을 초기화 해주자.

 

@RequiredArgsConstructor 와 @AllArgsConstructor 둘 모두 @NonNull 이 붙어 있는 필드의 경우 명시적으로

생성자내부에서 null check logic 이 발생한다고 한다.