• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

24.03.22 18:47 작성 조회수 140

0

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

[질문 내용]

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

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

 

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

답변 3

·

답변을 작성해보세요.

0

안녕하세요. todrkrwndgg님

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

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

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

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

감사합니다.

0

David님의 프로필

David

2024.03.23

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

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

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

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

https://bit.ly/3fX6ygx


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


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

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

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


링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.22

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

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

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

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

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

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

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

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

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

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