inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티 클래스 개발2

Entity 클래스에 기본 생성자가 없는데 왜 에러가 안나는 걸까요

502

todrkrwndgg

작성한 질문수 6

0

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

스크린샷 2024-03-22 182424.png

섹션 2 - 엔티티 클래스 개발2 15:18쯤에 강사님께서도 말씀하셨고, 직접 보여주셨듯이 Entity 클래스에 기본생성자가 없으면 컴파일 에러가 발생한다고 알고 있는데 저는 왜 컴파일 에러가 발생하지 않을까요??

 

@Embeddable 어노테이션 때문에 그런가 싶어서 다른 Entity 클래스에서도 확인해봤지만 똑같이 기본 생성자가 없어도 컴파일 에러가 발생하지 않습니다.

java spring 웹앱 spring-boot jpa

답변 3

0

김영한

안녕하세요. todrkrwndgg님

우선 영상에 나오는 오류는 컴파일 오류가 아니라 IDE에서 보여주는 오류입니다.

이 부분은 IDE 버전에 따라서 오류가 나기도 하고, 나지 않기도 하기 때문에 참고만 하시면 좋을 것 같아요.

그리고 JPA 기본 스펙에는 기본 생성자가 필요합니다.

하이버네이트 구현체가 기본 생성자 없이 작동하도록 해주지만, 일부 구현체에 따라서 작동하지 않는 문제가 발생할 수 있습니다.

감사합니다.

0

David

안녕하세요. todrkrwndgg님, 공식 서포터즈 David입니다.

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx


주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요


추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명


링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

todrkrwndgg님의 질문에 대해, JPA에서 엔티티 클래스가 기본 생성자를 가지지 않아도 컴파일 오류가 발생하지 않는 이유를 설명드리겠습니다.

JPA 스펙 상 모든 엔티티는 기본 생성자를 가져야 합니다. 그러나 이 기본 생성자는 public 또는 protected 접근 제한자를 가지는 것을 권장합니다. 주된 이유는 JPA 구현체가 리플렉션을 사용하여 엔티티 인스턴스를 생성하기 때문입니다.

@Embeddable 어노테이션을 사용하는 클래스 같은 내장 타입도 기본적으로 기본 생성자가 필요합니다. 여기서 주의할 점은 Java에서 기본 생성자는 명시적으로 작성하지 않아도, 다른 생성자가 전혀 없으면 컴파일러가 자동으로 기본 생성자를 추가해줍니다. 따라서 코드 상에 기본 생성자가 보이지 않아도 실제 컴파일된 클래스 파일에는 기본 생성자가 포함될 수 있습니다.

이와 유사한 상황이여서 컴파일 오류가 발생하지 않는 것일 수 있습니다. 또한, 현재 질문하신 코드 상황에서는 기본 생성자가 명시적으로 필요하지 않는 상황(예: 다른 생성자를 명시하지 않음)일 수 있으므로, 컴파일러에 의해 자동으로 생성될 가능성이 있습니다.

비슷한 주제로 질문한 다른 사용자의 질문을 찾았습니다. 해당 내용은 기본 생성자에 대한 궁금증을 다루고 있으며, 이는 todrkrndgg님의 질문과 연관이 있을 수 있습니다.

  • 기본생성자에서는 JPA 엔티티 객체에 기본 생성자가 필요한 이유와, 생성자를 명시하지 않았을 때 어떻게 동작하는지에 대해 설명하고 있습니다. 해당 답변에서는 기본 생성자가 JPA 리플렉션 사용을 위해 필요하다고 언급됩니다.

  • private 기본 생성자 관련 질문에서는 @Entity를 사용하는 클래스가 public 또는 protected 기본 생성자를 가지는 것이 필수라는 점을 언급하고 있습니다. 다만, 실제 테스트에서는 private 기본 생성자를 가진 엔티티도 문제 없이 동작하는 사례를 논의하고 있습니다. 이는 JPA 구현체가 특정 상황에서 리플렉션을 통해 접근 제한자에 관계없이 객체를 생성할 수 있음을 보여줍니다.

이 정보들이 todrkrwndgg님의 궁금증 해결에 도움이 되기를 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

sdk 설정 오류

0

53

2

오탈자 - @Transactional

0

56

1

src/test/resources 테스트 경로 문제

0

50

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

64

1

MemberRepositoryTest 실행오류

0

81

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

183

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

142

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

51

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

60

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

103

1

멤버서비스테스트 부분에서 막힙니다.

0

165

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

116

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

120

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

114

1

24분 27초 연관관계 편의 메서드 위치

0

113

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

109

2

빌드 툴, Gradle

0

59

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

77

2

Repository에서 EntityManager 주입 방식 차이

0

90

1

롬복과 사용자 정의 setter 메서드

0

73

1

주문 목록 조회 fetch join 질문드립니다

0

82

1

dirty checking 질문드립니다.

0

83

1

동시성 관련 질문입니다

0

75

1