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 이 발생한다고 한다.