-
@RequiredArgsConsructor ,@NoArgsConstructor , @AllArgsConstructorJava&Spring/Spring 2023. 2. 15. 18:13
지난 블로그
https://chosunghyun18.tistory.com/76
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 이 발생한다고 한다.
'Java&Spring > Spring' 카테고리의 다른 글
@Transactional (1) (1) 2023.08.09 Q . SpringBoot 에서 경로를 어떻게 인식을 하는 것인가 ? part 1 (0) 2023.08.05 @RequiredArgsConstructor, @NotNull, @Valid ,@NotBlank (0) 2023.02.15 em.persist 이후 get$ObjsectId() 가 가능 한가? (0) 2023.02.04 스프링부트 GCS 연동 part2 (0) 2023.01.26