본문 바로가기
JAVA & SPRING/JPA

JPA 기본편0(값 타입 {기본값 타입, 임베디드 타입})

by 눈오는1월 2024. 3. 4.
728x90

본 내용은 인프런 김영한 강사님 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는 임베디드 타입이라고 한다.

복합 값 타입이라고도 불린다 ( 주로 기본 값 타입을 모은다.)

 

임베디드 타입 에시를 하나 들자면 회원 엔티티에는 이름, 근무 시작일, 종료일, 주소 도시, 주소 번지, 주소 우편번호를 가진다고 하자

임베디드 타입 예시 왼쪽은 일반적인 나열 오른쪽은 비슷한 변수를 임베디드 타입으로 묶어서 Member 클래스로 구현

여기서 근무 시작일과 근무 종료일을 하나로 묶을 수 있고, 주소 도시, 주소 번지, 주소 우편변호를 하나로 묶을 수 있다.

근무를 Period 주소를 Address 란 이름의 클래스로 묶어서 임베디드 타입으로 사용하면 위 그림 같이 Member 클래스를 만들 수 있다.

 

임베디드 타입 사용법

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

임베디드 타입 클래스를 사용하는 Member 엔티티

위 코드는 Address와 Period 임베디드 타입 클래스를 사용하는 Member 엔티티이다. @Embedded는 위에 @Embeddable 어노테이션을 붙일 경우 안 붙여도 문제없지만 되도록이면 붙이는 것을 추천한다. ( 둘 중 하나만 하면 된다)

 

임베디드 타입 사용할 경우 재사용, 높은 응집도에서 이점을 볼 수 있다.

또한 해당 값 타입만 사용하는 의미 있는 메서드를 만들 수 있다.

추가로 모든 값 타입(+임베디드 타입) 은 소유한 엔티티에 생명주기를 의존한다.

 

만약 한 엔티티에서 같은 값 타입을 사용하려고 하면 @AttributeOverride를 사용하고, 칼럼 명 속성을 재정의 하면 된다.

@AttributeOverride 속성 재정의 예시

 

728x90