JPA 임베디드 타입

김두현·2023년 5월 2일
1

JPA

목록 보기
13/14
post-thumbnail

Goal

  • 임베디드 타입의 개념을 파악한다.
  • 임베디드 타입의 사용법을 파악한다.
  • 임베디드 타입의 특징을 파악한다.
  • @AttributeOverride 의 용도를 파악한다.
  • 임베디드 타입의 한계와 대안을 파악한다.

임베디드 타입이란?

  • 임베디드 타입 : 복합 값 타입이라고도 불리며, int String 등 여러 타입을 모아 만든 새로운 값 타입을 의미한다.

    아래와같이 유사한 필드를 묶어 응집도를 높이고 싶을 때, 임베디드 타입을 활용할 수 있다.

임베디드 타입 사용법

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

  • 임베디드 타입 정의

  • 임베디드 타입 사용

임베디드 타입의 특징

장점

임베디드 타입을 통해 아래와 같은 장점을 얻을 수 있다.

  • 높은 재사용성
  • 높은 응집도
  • 해당 타입만 사용하는 의미있는 메서드를 생성할 수 있다.

  • 임베디드 타입은 엔티티에 생명주기를 의존한다.

테이블 매핑

임베디드 타입은 엔티티의 값일 뿐, 테이블의 구조에는 변함이 없다.
객체와 테이블이 세밀하게 매핑될 수 있도록 도와준다.
따라서 설계가 잘 된 ORM은 테이블의 수보다 클래수의 수가 더 많다.


@AttributeOverrides

만약 하나의 엔티티에서 같은 임베디드 타입을 사용하고싶다면 어떻게 해야할까?

  • DB에서 컬럼명이 중복되는 문제가 발생하기 때문에,
    @AttributeOverrides@AttributeOverride 를 사용하여 컬럼명을 재정의한다.

임베디드 타입의 한계와 대안

한계

임베디드 타입은 객체 타입이기 때문에, 기본 타입처럼 값을 복사해서 전달하지 않고 참조를 전달한다.
따라서 아래 코드를 실행하면, a의 값 또한 New로 바뀌게된다.
객체 타입에 참조 값을 직접 대입하는 것을 막을 방법이 없기 때문에, 임베디드 타입을 사용한다는 것은 늘 이러한 위험에 노출되어 있음을 의미한다.


대안

이에 대한 대안으로서, 임베디드 타입을 불변 객체로 생성한다.

  • 불변 객체 : 생성 시점 이후 값을 변경할 수 없는 객체
    • 생성자를 통해서 값을 설정하고, setter를 생성하지 않거나 private 클래스로 명시한다.
    • 그럼에도 값을 바꾸고싶다면, new 를 통해 생성자를 다시 호출해야한다.

참고 자료

https://www.inflearn.com/course/ORM-JPA-Basic


💕오류 지적 및 피드백은 언제든 환영입니다. 복제시 출처 남겨주세요!💕
💕좋아요와 댓글은 큰 힘이 됩니다.💕
profile
I AM WHO I AM

0개의 댓글