백엔드/JPA

[JPA] 기본 값 타입과 임베디드(embedded) 타입

happy_life 2022. 8. 19. 16:00

JPA 의 대표적인 값 타입인 기본 값 타입과 임베디드 타입에 대해 알아봅니다.

 

 

목차

1. 기본 값 타입

2. 임베디드 타입

 

기본 값 타입

1. 개념

int, String, Long처럼 단순히 값으로 사용되는 자바의 기본 타입입니다. 식별자가 없고 값만 있어 변경하면 추적이 불가능합니다. 예를 들어 아래의 코드에서 a 값을 변경해도, b가 추적할 수 없습니다.

 

코드 예제

int a = 10;
int b = a;

a = 20;

System.out.println("a = " + a);
System.out.println("b = " + b); // 여전히 10입니다.

 

2. 종류

① 자바 기본 타입 (int, double)

② 래퍼 클래스 (Integer, Long)

③ String

 

3. 특징

① 생명 주기를 엔티티에 의존합니다. 예를 들어 회원 엔티티를 삭제하면 이름, 나이 등의 필드도 함께 삭제됩니다.

② 기본 값 타입은 공유되지 않습니다. 값만 복사되므로 값이 공유되지 않습니다.

 

 

 

임베디드 타입

1. 개념

새로운 값 타입을 직접 정의할 수 있습니다. 기본 값 타입을 모아서 만들기 때문에 복합 값 타입이라고도 합니다.

 

2. 예시

회원 엔티티가 주소 도시, 주소 번지, 주소 우편번호를 가집니다. 객체의 관점에서 주소와 관련된 도시, 번지, 우편번호를 묶는 것이 바로 임베디드 타입입니다. 아래의 사진을 보며 이해해보겠습니다. 왼쪽 사진은 임베디드를 적용하지 않는 기본 값 타입이고, 오른쪽 사진은 임베디드를 적용한 타입입니다. Address라는 클래스를 만들고 city, street, zipcode를 필드로 선언하였습니다.

임베디드 적용X / 임베디드 적용O

 

 

3. 특징

① 재사용이 가능합니다.

② 클래스로 묶여 응집도가 높습니다.

③ 임베디드 타입도 내부적으로는 기본값 타입입니다.

④ 임베디드 타입이 null이면 매핑한 컬럼은 모두 null로 저장됩니다.

⑤ 객체 타입이기 때문에 공유 문제가 생기고, 따라서 불변 객체로 설정해야 합니다.