새로운 값 타입을 직접 정의해서 사용할 수 있다. Java에서 기본적으로 제공하는 기능 중 하나이다. 임베디드 타입은 다음과 같이 사용될 수 있다.
회원이라는 엔티티가 주소에 대한 정보를 갖고 있다고 생각해보자. 주소에는 도시, 번지 등 많은 정보가 포함되는 데 이를 하나하나 회원 엔티티에 추가하게 되면 회원 엔티티가 가지고 있는 필드가 불필요하게 늘어나게 된다.
이를 임베디트 타입으로 선언하면 필드를 최소한으로 줄이는 방향으로 설계할 수 있다.
@Embeddable
@Getter
public class Address {
private String city;
private String street;
private String zipcode;
protected Address() {
}
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
}
// 임베디드 타입 사용하지 않았을 때
@Entity
@Getter
public class Member {
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
@NotEmpty
private String name;
// 주소 표현
private String city;
private String street;
private String zipcode;
}
@Entity
@Getter
public class Member {
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
@NotEmpty
private String name;
@Embedded
private Address address;
}
임베디드 타입을 사용할 때는 @Embedded 어노테이션을 추가로 사용하면 된다.
@AttributeOverride를 사용해서 추가가 가능합니다.