https://velog.io/write?id=f38b248b-9fad-4b9c-a4a6-0b6594e6e6fc
Builder에 대한 설명은 위 링크 참조
Builder와 NoArgsConstructor
@NoargsConstructor는 파라미터가 없는 생성자를 만들어준다. 이 때 force의 디폴트는 @NoArgsConstructor(force=true)이다. 필드가 초기화되지 않을 경우 자동으로 0/false/null로 초기화한다. 필드를 초기화하지 않으면서 force를 false로 할 경우 에러가 발생한다.
@NoArgsConstructor
public class TestClass {
private String name;
private int id;
TestClass(int num) {
id=num;
}
}
//main
TestClass test = new TestClass();
@NoArgsConstructor를 달지 않았으면 기본 생성자가 생성되지 않아 컴파일 에러가 나지만, 어노테이션을 붙여 문제 없이 돌아간다.
Entity나 DTO에 @NoArgsConstructor(access = AccessLevel.PROTECTED)를 추가하는 이유는 뭘까?
@NoArgsConstructor
@Setter
public class Student {
private String name;
private String id;
private int age;
}
public class Main {
public static void main(String[] args) {
Student student = new Student();
student.setName("이름");
}
}
이 경우, 이름만 설정했으므로 객체는 불완전하다.
@Builder와 같이 쓴다면 에러가 난다.
왜일까?
@Builder는 자동으로 @Builder클래스를 생성해주고,
이 Builder의 동작 방식은
https://velog.io/@cieroyou/Builder-%EC%82%AC%EC%9A%A9%EB%B2%95
잘 설명된 글이 있어 우선 첨부하고 임시저장!
[참고]
https://hongdosan.tistory.com/entry/Spring-NoargsConstructorAccessLevelPROTECTED-Builder