Value-Type
1 값 타입
- JPA의 데이터 타입을 가장 크게 분류하면 엔티티 타입과 값 타입으로 나눌 수 있다
- 엔티티 타입: @Entity로 정의한 객체
- 값 타입: int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 말한다.
1.1 값 타입 예시
@Embeddable
@Getter
public class Address {
private String city;
private String street;
private String zipcode;
}
- 값 타입은 변경 불가능하게 설계해야 한다.
- @Setter 를 제거하고, 생성자에서 값을 모두 초기화해서 변경 불가능한 클래스를 만든다
- JPA 스펙상 엔티티나 임베디드 타입( @Embeddable )은 자바 기본 생성자(default constructor)를
public
또는protected
로 설정해야 한다.public
으로 두는 것 보다는protected
로 설정하는 것이 그나마 더 안전 하다.- JPA가 이런 제약을 두는 이유는 JPA 구현 라이브러리가 객체를 생성할 때 리플랙션 같은 기술을 사용할 수 있도록 지원해야 하기 때문이다.
1.2 값 타입의 특징
- 식별자가 없다
- 생명 주기를 엔티티에 의존한다
- 공유하지 않는 것이 안전하다
- 값을 복사해서 사용한다
- 오직 하나의 주인만이 관리해야 한다
- 불변 객체로 만드는 것이 안전하다