본문 바로가기
Spring Study/JPA 기본

[JPA] 값 타입

by 정재인 2023. 11. 6.

JPA의 데이터 타입 분류

 


엔티티 타입

· @Entity로 정의하는 객체

· 데이터가 변해도 식별자로 지속해서 추적 가능

 

값 타입

· int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체

· 식별자가 없고 값만 있기 때문에 변경 시 추적 불가

 

값 타입 분류

· 기본 값 타입

- 생명주기를 엔티티에 의존 (회원을 삭제하면 이름, 나이 필드도 함께 삭제)

- 값 타입은 공유 X (회원 이름 변경 시 다른 회원의 이름도 함께 변경되면 안됨)

 

· 임베디드 타입(embedded type, 복합 값 타입)

- 새로운 값 타입을 직접 정의할 수 있음

- 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함

- @Embeddable: 값 타입을 정의하는 곳에 표시

- @Embedded: 값 타입을 사용하는 곳에 표시

- 기본 생성자 필수

 

· 컬렉션 값 타입(collection value type)

- 값 타입을 하나 이상 저장할 때 사용

- @ElementCollection, @CollectionTable 사용

- 데이터베이스는 컬렉션을 같은 테이블에 저장 X

- 컬렉션을 저장하기 위한 별도의 테이블 필요

 


값 타입과 불변 객체

불변 객체

· 객체 타입을 수정할 수 없게 만들면 부작용을 원천 차단

· 값 타입은 불변 객체(immutable object)로 설계해야 함

· 불변 객체: 생성 시점 이후 절대 값을 변경할 수 없는 객체

· 생성자로만 값을 설정하고 수정자(Setter)를 만들지 않으면 됨

ex) Integer, String

 

값 타입 비교

· 동일성(identity) 비교: 인스턴스의 참조 값을 비교 '==' 사용

· 동등성(equivalence) 비교: 인스턴스의 값을 비교 'equals()' 사용

· 값 타입은 a.equals(b)를 사용해서 동등성 비교 해야함

 

'Spring Study > JPA 기본' 카테고리의 다른 글

[JPA] 객체지향 쿼리 언어(JPQL)  (0) 2023.11.07
[JPA] 프록시와 연관관계 관리  (1) 2023.11.01
[JPA] 고급 매핑  (0) 2023.10.31
[JPA] 다양한 연관관계 매핑  (0) 2023.10.30
[JPA] 연관관계 매핑  (0) 2023.10.18

댓글