'모든 매개변수 생성자'인 것 처럼 해당 클래스 내의 모든 변수값을 가진 생성자를 자동으로 만들어 준다.
"아무런 매개변수가 없는 기본 생성자"
ACCESSLEVEL를 따로 걸지 않으면, 외부에서 생성자에 쉽게 접근할 수 있기 때문에,
-> 유지보수성을 최대화하고 접근가능성을 최소화하기 위해 사용
속성 access
Entity나 DTO를 사용할 때 @NoArgsConstructor(access = AccessLevel.PROTECTED) 어노테이션을 많이 사용하는 편
즉, 의도하지 않은 엔티티를 만드는 것을 막을 수 있기 때문!
/** User.java */
@Getter @Setter
@NoArgsConstructor
public class User {
private String name;
private Long age;
private String email;
}
/** Main.java */
public static void main(String[] args) {
User user = new User();
user.setName("testname");
user.setEmail("test@test.com");
// age가 설정되지 않았으므로 user는 완전하지 않은 객체
}
⬇️
/** User.java */
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
private String name;
private Long age;
private String email;
public User(Long age, String email) { // 파라미터가 두 개인 경우 name은 default 설정
this.name = "blank name";
this.age = age;
this.email = email;
}
}
/** Main.java */
public static void main(String[] args) {
User user = new User(15, "test@a.com");
/// 기본 생성자가 없고 객체가 지정한 생성자를 사용해야하기 때문에
/// 무조건 완전한 상태의 객체가 생성되게 된다.
}