inflearn logo
강의

Course

Instructor

Java ORM Standard JPA Programming - Basics

Value type comparison

객체타입은 값타입인가요? 엔티티타입인가요?

130

gomdole030581

108 asked

0

안녕하세요. 강의에서,

값 타입에서, 기본타입은 == 비교를 해도되는데,

그 외에 객체타입이나 임베디드타입은 equals를 재정의해서 사용하여 비교해야한다.

라고 말씀하셨습니다.

 

앞서 강의에서도 객체타입이라는 단어가 나오는데, 객체타입은 엔티티 타입으로 분류가 되나요? 아니면 값타입으로 분류가 되나요?

엔티티 타입인거 같기도하고.. 값타입인거 같기도해서.. 어떤것으로 분류되는것인지 이유가 궁금합니다...ㅠㅠ

값타입은 기본값타입, 임베디드타입, 컬렉션값타입이 있다고 앞선 강의에서 말씀해주셨는데, 그럼 강의에서 나오는 Address 객체타입은 어디에 속하는것인가요 ..?

java jpa

Answer 4

0

sj y

JPA의 관점에서 바라볼때 Address는 임베디드타입의 값인 객체입니다.

원래 자바에서 객체는 엔티티로 통하지만 우린 JPA를 배우고 JPA의 관점에선 @Entity를 매핑하고 @Id를 쓰는 객체만이 엔티티이고 복합 키를 위해 정의된 경우는 임베디드 타입의 값인 객체를 정의한 것이기 때문에 값이라 할 수 있죠

 

그렇기 때문에 @Embeddable로 매핑된 클래스의 equals()를 오버라이드 하는 이유도 객체 주소의 비교가 아닌 객체 안의 내용물(필드)를 비교하기 위해서 하는거죠.

0

David

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

아래와 같이 정리할 수 있습니다.

JPA의 데이터 타입

  1. 엔터티 타입

    1. @Entity를 사용하여 정의한 것

  2. 값 타입

    1. 자바의 원시타입(int, long etc), 참조타입(String, Object etc)

Address의 경우 값 타입에 해당합니다:)

감사합니다.

0

gomdole030581

이해가 잘 되지않습니다..ㅠㅠ

좀 더 설명 부탁드려도 될까요 ..?

0

communityai8509

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

오리쉐리님이 질문해주신 내용에 대해 조금 더 설명드리겠습니다. JPA에서는 데이터 타입을 크게 엔티티 타입과 값 타입으로 나눕니다. 이때 ‘객체타입’이라는 용어는 혼란스러울 수 있는데요, JPA 관점에서 보았을 때는 객체엔티티 타입인지 값 타입인지에 따라 다르게 분류됩니다.

  1. 엔티티 타입: 엔티티는 고유의 식별자(예를 들어, @Id로 지정된 필드)를 가지고 있는 JPA의 관리 대상 객체입니다. 이는 보통 데이터베이스의 테이블에 매핑되며, 라이프사이클을 데이터베이스에 의해 관리하게 됩니다.

  2. 값 타입: 값 타입은 식별자를 가지고 있지 않고, 다른 엔티티에 의존하여 사용되거나 임베디드되어 사용됩니다. 예를 들어 강의에서 언급된 Address 객체는 보통 임베디드 타입 혹은 값 타입으로 사용되며, 독립적인 엔티티가 아닙니다.

JPA에서 Address와 같은 객체는 보통 값 타입으로 분류되며, 이는 @Embeddable 혹은 엔티티 내의 값 타입 컬렉션으로 사용될 수 있습니다.

객체 타입은 JPA에서 관점에 따라 엔티티 타입, 값 타입으로 구분되며, 식별자가 있는지 여부에 따라 구분됩니다. Address와 같은 객체는 독립적인 식별자를 가지지 않고, 다른 엔티티 안에서 필드로 사용되기 때문에 값 타입으로 분류됩니다.

이해를 돕기 위해 아래 링크의 게시물을 참고해 주시면 좋을 것 같아요:
- 값 타입이라는건 결국 엔티티 객체 안에 포함된다 라고 생각해도 될까요?
- 엔티티 타입과 값 타입은 JPA 에 한정해서 구분해놓은 데이터 타입인가요?

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

실무 조언 관련 질문입니다.

0

36

1

H2데이터베이스 파일 생성

0

45

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

47

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

45

1

JPQL 메소드와 락

0

47

1

Delivery @OneToOne

0

54

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

84

2

UnsupportedOperationException 발생

0

80

3

H2 Database 연결이 안됩니다.

0

86

2

연관관계 매핑 질문드립니다.

0

77

2

h2데이터베이스 실행오류

0

103

2

persistence.xml

0

100

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

74

1

영속성 컨텍스트

0

59

1

JPA 프록시

0

86

1

Native Query와 MyBatis

0

60

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

81

1

임베디드 타입 예시 코드 관련 질문

0

110

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

89

3

인텔리제이 패키지 커서 단축키 질문

0

100

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

133

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

67

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

172

2