본 내용은 인프런 김영한 강사님 JPA 기본 편 강의를 듣고 정리한 내용입니다.
https://www.inflearn.com/course/ORM-JPA-Basic
자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 - 인프런
K-개빈 킹 이 수식어가 어울리는 강사, 대한민국에서 사투리가 가장 섹시한 강사, 내 프로젝트에 의존성으로 추가하고 싶은 강사 강의결제를 고민하는 분들께 1) 너무 훌륭한 강의입니다. 무엇보
www.inflearn.com
JPA의 데이터 타입은 2가지로 분류된다. 엔티티 타입과 값 타입 이다.
엔티티 타입 특징
1. @Entity 어노테이션으로 정의하는 객체를 의미한다.
2. 데이터 값이 변해도 지속적으로 추적이 가능하다. ( ex) 엔티티 내 값이 변해도 식별자로 인식이 가능)
값 타입 특징
1. 단순히 값으로 사용하는 자바 기본 타입 or 기본 객체를 의미한다.
2. 식별자가 없고 값만 존재해서 변경 시 추적이 불가능하다.
값 타입에는 기본값 타입, 임베디드 타입, 컬렉션 값 타입 3가지로 분류할 수 있다.
기본값 타입
특징
- 생명주기를 엔티티의 의존한다
- 값 타입은 공유하면 안 된다. (레퍼런스를 가져오는 자료형(클래스 자료형) 경우 값을 변경 시의 다른 값에도 영향을 갈 수 있기 때문) ex) 회원 이름 변경 시에 다른 회원의 이름은 변경되면 안 된다.
임베디드 타입
임베디드 타입은 쉽게 말해서 좌표처럼 하나의 클래스로 만들어서 사용하는 것을 말한다.
특징
새로운 값 타입을 정의할 수 있다.
JPA는 임베디드 타입이라고 한다.
복합 값 타입이라고도 불린다 ( 주로 기본 값 타입을 모은다.)
임베디드 타입 에시를 하나 들자면 회원 엔티티에는 이름, 근무 시작일, 종료일, 주소 도시, 주소 번지, 주소 우편번호를 가진다고 하자


여기서 근무 시작일과 근무 종료일을 하나로 묶을 수 있고, 주소 도시, 주소 번지, 주소 우편변호를 하나로 묶을 수 있다.
근무를 Period 주소를 Address 란 이름의 클래스로 묶어서 임베디드 타입으로 사용하면 위 그림 같이 Member 클래스를 만들 수 있다.


위 코드들처럼 클래스로 만들고 난 후 @Embeddable 어노테이션을 붙이면 된다.

위 코드는 Address와 Period 임베디드 타입 클래스를 사용하는 Member 엔티티이다. @Embedded는 위에 @Embeddable 어노테이션을 붙일 경우 안 붙여도 문제없지만 되도록이면 붙이는 것을 추천한다. ( 둘 중 하나만 하면 된다)
임베디드 타입 사용할 경우 재사용, 높은 응집도에서 이점을 볼 수 있다.
또한 해당 값 타입만 사용하는 의미 있는 메서드를 만들 수 있다.
추가로 모든 값 타입(+임베디드 타입) 은 소유한 엔티티에 생명주기를 의존한다.
만약 한 엔티티에서 같은 값 타입을 사용하려고 하면 @AttributeOverride를 사용하고, 칼럼 명 속성을 재정의 하면 된다.

'JAVA & SPRING > JPA' 카테고리의 다른 글
| JPA0 기본편(값 타입 컬렉션) (0) | 2024.03.04 |
|---|---|
| JPA0 기본편(값 타입과 불변 객체, 값 타입 컬렉션) (0) | 2024.03.04 |
| JPA 기본편0 (연관관계 관리 즉시로딩과, 지연로딩) (0) | 2024.03.04 |
| JPA 기본편(프록시) (0) | 2024.03.04 |
| JPA 기본편0(연관관계 매핑 기초, 연관관계가 필요한 이유 & 연관관계 매핑) (0) | 2024.02.23 |