값타입 - 임베디드 타입

임베디드 타입이란

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

임베디드 타입 예시

[기존의 Member]

@Entity
public class Member {

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    @Column(name="USERNAME")
    private String username;

    private LocalDateTime startDate;
    private LocalDateTime endDate;

    private String city;
    private String street;
    private String zipcode;
}

[임베디드 타입 적용 후 Member]

@Entity
public class Member {
    
    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;
    
    @Column(name = "USERNAME")
    private String username;
    
    @Embedded
    private Period workPeriod;
    
    @Embedded
    private Address homeAddress;
}

@Embeddable
public class Period {
    
    private LocalDateTime startDate;
    private LocalDateTime endDate;
}

@Embeddable
public class Address {
    
    private String city;
    private String street;
    private String zipcode;
}
  • @Embeddable : 값 타입을 정의하는 곳에 표시
  • @Embedded : 값 타입을 사용하는 곳에 표시
  • 기본 생성자는 필수이다.

임베디드 타입의 장점

  • 재사용
  • 높은 응집도
  • Period.isWork()처럼 해당 값 타입만 사용하는 의미있는 메소드를 만들 수 있다.
  • 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티티에 생명주기를 의존한다.

임베디드 타입과 테이블 매핑

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

좋은 웹페이지 즐겨찾기