1. @NoArgsConstructor: 파라미터가 없는 기본 생성자를 생성
2. @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 생성
3. @RequiredArgsConstructor : final이나 @Nonnull인 필드 값만 파라미터로 받는 생성자를 생성
- @Nonull : 데이터 값이 NULL이면 에러 반환
Reflection API
를 사용하여 값을 매핑근데
@Entity
어노테이션은 자동으로 기본 생성자를 만들어주는데..?
@NoArgsConstructor
없어도 되는거 아니야?
엔티티에는 @Setter
어노테이션을 붙이지 않는다. 각 필드에 대해 일관성을 유지해야하기때문이다. 그러나 값은 넣어줘야하므로 안전하게 생성자를 쓰는 것이다.
따라서,
@NoArgsConstructor
를 활용해서 기본생성자를 추가하되, 접근제한을 걸어서 안전성도 높이는 것이다!
@Entity
는 생성자를 추가하는 코드를 쓰지 않아도 자동으로 기본생성자는 만들어주지만, 이미 생성자가 있는 경우에는 만들지 않는다.
그렇기 때문에
@AllArgsConstructor
를 적용하고 나면 기본생성자가 만들어지지 않는 문제가 생겨버리는 것이다!
EAGER
: 즉시로딩
LAZY
: 지연로딩
Proxy 객체
로 존재→ 지연로딩 방식을 사용하는 것을 권장
Proxy 객체
로 가져오게 된다이때
Proxy 객체
는 Entity Class를 상속받아 만들어진 객체이므로 Entity의 기본 생성자에 대한 접근제어자가 Private일 시 Entity class를 상속받을 수 없어 Proxy 객체를 생성할 수 없다.
public
으로 기본 생성자를 열어두는 것은 무분별한 객체 생성을 야기할 수 있다.