값 타입?
- 엔티티의 상태를 표현하는 데 사용되는 데이터
- 일반적으로 불변의 상태를 가짐
- 부작용을 방지하고 보다 안전한 프로그래밍이 가능함
- 보통 숫자, 날짜 , 복합 값을 포함
값 타입 공유 참조 문제
- 임베디드 타입 등의 값 타입이 여러 엔티티 간에 공유되는 경우 문제가 발생함
- 예시
- 두 개의 회원 엔티티가 동일한 주소의 인스턴스를 참조하는 경우
- 한 회원의 주소가 변경되면 참조를 공유하는 다른 회원의 주소도 영향
- 문제 예시
member1.setHomeAddress(new Address("OldCity"));
Address address = member1.getHomeAddress();
address.setCity("NewCity"); // 회원1의 주소 값을 공유해서 사용
member2.setHomeAddress(address);
- 문제의 해결
- 값 타입을 공유하면 X
- 대신 복사를 해서 사용해야합니다.
- 복사는 당연 깊은 복사입니다. -⇒ 새로운 인스턴스를 생성해야함
- 불변 객체로 만드는 방법
- 생성자에서만 상태를 설정해야함
- setter 메서드 제공 X
- 필요하다면 값을 변경하는 메서드를 제공해야함
- 기존 인스턴스를 반환하는게 아니라
- 새로운 인스턴스를 반환해야함!
// Address 클래스가 불변 객체라고 가정할 때
member1.setHomeAddress(new Address("OldCity"));
Address newAddress = member1.getHomeAddress().withCity("NewCity");
member2.setHomeAddress(newAddress); // 새로운 인스턴스를 할당
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 서브 쿼리 ( Subqueries ) (0) | 2023.11.10 |
---|---|
[JPA] 조건식 (0) | 2023.11.10 |
[JPA] 값 타입 컬렉션 (0) | 2023.11.09 |
[JPA] 값 타입 컬렉션 개요 (0) | 2023.11.09 |
[JPA] 값 타입 컬렉션 제약사항과 대안적 접근 방법 (0) | 2023.11.09 |