[JAVA] @NoArgsConstructor 어노테이션, @AllArgsConstructor 어노테이션

[JAVA] @NoArgsConstructor 어노테이션, @AllArgsConstructor 어노테이션

@NoArgsConstructor : 기본 생성자(매개변수가 없는 생성자)를 생성
@AllArgsConstructor : 클래스의 모든 필드를 매개변수로 받는 생성

1. @NoArgsConstructor (Lombok과 JPA 같이 사용하면 필수)
Lombok과 JPA를 같이 사용할 때 @NoArgsConstructor 어노테이션은 필수적이다.
JPA는 Entity를 리플렉션으로 생성할 때 기본 생성자를 호출하고, 만약 기본 생성자가 없으면, JPA가 Entity를 조회할 때 오류 발생한다.

Java는 생성자를 하나도 작성하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어 준다.
그런데 Lombok에서 @Builder나 @AllArgsConstructor를 사용하면 Lombok이 생성자를 명시적으로 생성해주는데, 이 경우 자바 컴파일러가 자동으로 기본 생성자를 만들어주지 않는다.
그러므로 오류가 발생할 수 있기 때문에 JPA를 사용할 때 @NoArgsConstructor 어노테이션은 필수적이다.

2. @AllArgsConstructor (@Builder와 같이 사용)
@Builder는 Lombok이 제공하는 어노테이션이고, 필드값을 세팅할 수 있는 Builder 클래스를 자동 생성해준다.
@Builder를 사용하면 Lombok이 빌더가 사용할 전용 생성자를 자동으로 생성하기 때문에, 빌더 기능을 위해 @AllArgsConstructor를 따로 붙일 필요는 없다.
다만, 외부에서 전체 필드를 받는 생성자를 직접 호출해야 하는 경우에는 @AllArgsConstructor를 같이 사용하면 된다.