@NoArgsConstructor는 왜 쓰나

김희영·2025년 10월 29일

spring

목록 보기
15/26

@NoArgsConstructor?

@NoArgsConstructorLombok에서 제공하는 어노테이션으로,
매개변수가 없는 기본 생성자를 자동으로 생성.

@NoArgsConstructor
public class Member {
    private String name;
    private int age;
}

위 코드에서 @NoArgsConstructor가 붙으면 다음 코드가 자동 생성된다:

public Member() { }

그럼 왜 써야 할까?

JPA(Entity 클래스)에서는 기본 생성자(파라미터 없는 생성자)가 반드시 필요하다.
그 이유는 JPA가 엔티티 객체를 생성할 때 직접 new를 사용하지 않기 때문이다.


왜 JPA는 new를 안 쓰는가?

JPA는 데이터베이스에서 조회한 결과를 객체로 바꿀 때
Java Reflection API를 사용한다. (new 안씀)

이때 기본 생성자가 없으면 JPA가 객체를 생성할 방법이 없어 에러가 발생한다.


Java Reflection API란?

리플렉션(Reflection)
프로그램이 런타임(실행 중)
클래스의 구조(필드, 메서드, 생성자 등)에 접근하고 조작할 수 있게 해주는 기능이다.

예를 들어, 클래스 이름만 알고 있어도 다음처럼 접근 가능하다:

Class<?> clazz = Class.forName("com.example.Member");
Object obj = clazz.getDeclaredConstructor().newInstance(); // 기본 생성자로 객체 생성

이런 식으로 JPA는 런타임에 엔티티 클래스를 찾아서
리플렉션을 이용해 객체를 만들고, 필드에 값을 채워 넣는다.


결론적으로 @NoArgsConstructor사용하는 이유는 JPA에서는 기본 생성자가 무조건 있어야 하고, 이를 통해 생성자가 외부에서 함부로 호출되지 않게 하기 위함이다.
-> JPA 내부에서만 사용됨
-> 캡슐화와 불변성 유지

profile
내는 반드시 엄청난 개발자가 되고 말것어

0개의 댓글