자바 기본 타입이나 객체
식별자가 없고 값만 있으므로 변경 시 추적 불가능(값 그 자체)
생명 주기를 엔티티에 의존한다.
값 타입은 여러 곳에서 공유하여 사용하면 위험하다.
값 타입으로는 기본 값 타입, 임베디드 타입, 컬렉션 값 타입이 있다.
값 타입은 여러 곳에서 공유하여 사용하면 위험하다.
특히 임베디드 타입의 경우 여러 엔티티에서 공유하면 Side Effect 가 발생할 수 있다.
Address address = new Address("city", "street", "zipcode");
Member member = new Member();
member.setUsername("member1");
member.setHomeAddress(address); // 동일한 VO 인스턴스 공유
em.persist(member);
Member member2 = new Member();
member2.setUsername("member2");
member2.setHomeAddress(address); // 동일한 VO 인스턴스 공유
em.persist(member2);
// member의 city 만 변경하기를 원하였지만 member2의 city 까지 같이 변경되었다.
// 값 타입의 실제 인스턴스인 값을 공유하는 것은 위험하다.
member.getHomeAddress().setCity("newCity");