[JPA] 임베디드 타입

형이·2023년 10월 13일

Spring

목록 보기
20/21
post-thumbnail

📝 JPA

🖥️ 1. 임베디드 타입이란?

  • 새로운 값 타입을 직접 정의할 수 있다.
  • JPA는 임베디드 타입 (embedded type)이라고 함.
  • 주로 기본값 타입을 모아서 만들어서 복합값 타입이라고도 한다.

1-1. JPA에서 임베디드 타입 사용법

  • @Embeddable : 값 타입을 정의하는 곳에 표시
  • @Embedded : 값 타입을 사용하는 곳에 표시
  • 기본 생성자 필수

1-2. 임베디드 타입의 장점

  • 재사용
  • 높은 응집도
  • period.isWork()처럼 해당 값 타입만 사용하는 의미있는 메서드를 만들 수 있다 (객체지향적 설계가 가능하다)
  • 임베디드 타입을 포함한 모든 값 타입은 값 타입을 소유한 엔티티 생명주기를 의존한다.

1-3. 임베디드 타입과 테이블 매핑

  • 임베디드 타입은 엔티티의 값일 뿐이다.
  • 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다.
  • 객체와 테이블을 아주 세밀하게 매핑하는 것이 가능
  • 잘 설계한 ORM 애플리케이션은 매핑한 테이블의 수보다 클래스의 수가 더 많다.

1-4. @AttributeOverride : 속성 재정의

  • 한 엔티티에서 같은 값 타입을 사용하려면 컬럼명이 중복
  • @AttributeOverride를 사용해서 컬럼명 속성을 재정의

1-5. 객체 타입의 한계

  • 항상 값을 복사해서 사용하면 공유 참조로 인해 발생하는 부작용을 피할 수있다.
  • 문제는 임베디드 타입처럼 직접 정의한 값 타입은 자바의 기본 타입이 아니라 객체 타입이다.
  • 자바 기본 타입에 값을 대입하면 값을 복사한다.
  • 객체 타입은 참조값을 직접 대입하는 것을 막을 방법이 없다.
  • 객체의 공유 참조는 피할 수 없다.

0개의 댓글