@NoArgsConstructor

: 파라미터가 없는 기본 생성자를 자동으로 생성합니다.

언제 사용하는가!

  1. JPA 엔티티: JPA는 리플렉션을 통해 프록시 객체를 생성하기 위해 기본 생성자가 반드시 필요합니다.
  2. JSON 직렬화/역직렬화: JSON을 객체로 변환할 때 기본 생성자를 사용합니다.
@NoArgsConstructor(access = AccessLevel.PROTECTED)

→ JPA는 접근이 가능하고, 외부에서 무분별한 객체 생성을 방지합니다.

→ 의미 없는 빈 객체 생성 막을 수 있습니다.

@AllArgsConstructor

: 모든 필드를 매개변수로 받는 생성자를 자동으로 생성합니다.

@Builder

: 빌더 패턴으로 자동으로 생성해서 객체 생성을 지원합니다.

언제 사용하는가!

  1. 필드가 많을 때
  2. 선택적 파라미터가 있을 때
  3. 불변 객체를 만들고 싶을 때

@Builder와 @NoArgsConstructor를 함께 사용하면 컴파일 에러가 발생합니다.