JPA Entity 내 값 객체 타입 중
임베디드 타입을 정리해보자.
주로 배송지, 주소 등같이 필수적으로 묶어야 하는 것들은 아예 객체로 묶어서 관리한다.
ex. 이름, 도시, 주소 번지, 주소 우편번호
@Embeddable 를 붙여주면
주소 임베디드 타입을 생성하기 위해 주소 클래스가 생성되고
@Embedded 의 최대 장점은 @Embedded를 붙여 많은 필드를 회원에 이식(임베디드)시킬 수 있다.
Address
@Embeddable
@Getter
public class Address {
private String city;
private String street;
private String zipcode;
}
Member
@Entity
@Getter @Setter
public class Member {
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
private String name;
@Embedded
private Address address;
}
💥헷갈리지 말아야할 것은!
DB상에는 Address도 Member 테이블의 필드로 들어가는 거다.
실제로 다음과 같이 추가가 됨! (city, street, zipcode)

💥주의점!
1) 값 객체는 불변 객체여야 한다는 점! 그래서 @Setter 는 두지 않아야 한다!
2) 값 객체 비교할 때도 객체를 비교하기 때문에 equals()를 사용해야 되고 인스턴스가 달라도 값이 같으면 true가 되기 위해 equals() hashCode()를 재정의를 해줘야 한다.
재정의하는 내용은 다음 블로그를 참고하기 바란다.
https://velog.io/@mooh2jj/equals와-hashCode는-언제-사용하는가