TIL 2023.11.15 Lombok @NoArgsConstructor

손창현·2023년 11월 15일
0

TIL

목록 보기
9/15

JPA를 사용하는 어플리케이션에서 무분별한 객체 생성을 막고자 Entity 클래스에 Lombok의 @NoArgsConstructor의 accesslevel을 private로 설정하면 다음과 같은 오류가 발생한다.

위 오류에서 알 수 있다싶이 JPA에서 Entity 클래스는 매개변수가 없는 생성자(No-arg)의 접근 레벨이 public 또는 protected로 해야한다. 이는 Compile 시점에 잡을 수 있는 오류가 아니기 때문에 더욱 조심해야한다.

JPA의 Entity 클래스에 public이나 protected 기본생성자 필요한 이유는 다음과 같다.

JPA 구현체에 의한 인스턴스화

Hibernate 또는 EclipseLink와 같은 JPA 구현체는 데이터베이스에서 데이터를 검색하는 프로세스 중에 엔티티 개체를 동적으로 인스턴스화해야 한다. 기본 생성자를 사용하면 JPA 구현체가 인수 없이 엔터티 클래스의 인스턴스를 생성할 수 있다.

프록시 생성

JPA 구현체는 동적 프록시 클래스를 사용하여 지연 로딩 및 변경 사항 추적과 같은 기능을 구현하는 경우가 많다. 이러한 프록시 클래스는 기본 생성자를 사용하여, 엔티티 클래스의 인스턴스를 만들어야 한다.

객체 초기화

JPA 구현체는 데이터베이스에서 해당 상태를 채우기 전에 엔티티 객체를 초기화해야 할 수도 있다.

리플렉션과의 호환성

JPA의 일부 작업에는 리플렉션을 사용하여 엔터티 클래스를 분석하고 조작하는 작업이 포함된다. 리플렉션 기반 인스턴스화에는 기본 생성자가 필요로 한다.

profile
백엔드개발자 손창현입니다.

1개의 댓글

comment-user-thumbnail
2023년 11월 15일

정보에 감사드립니다.

답글 달기