JPA에 대해 알아보자 : 9장 값타입

ParkIsComing·2023년 9월 11일

Spring

목록 보기
12/21
post-thumbnail

임베디드 타입

: 새로운 값 타입을 직접 정의해서 사용하는 것

  • @Embeddable : 값 타입을 정의하는 곳에 표시
  • @Embedded : 값 타입을 사용하는 곳에 표시

🔻근무기간, 주소를 값 타입으로 가지는 Member 엔티티

@Entity
public class Member{
	@Id @GeneratedValue
    private Long id;
    private String name;
    
    @Embedded
    Period workPeriod;
    @Embedded
    Address homeAddress;
}

🔻기간 임베디드 타입

@Embeddable
public class Period {
	@Temporal(TemporaType.DATE)
    Date startDate;
    @Temporal(TemporalType.Date)
    Date endDate;
    
    public boolean isWork(Date date){
    	//값타입을 위한 메서드 정의
    }
}

@AttributeOverride

  • 임베디드 타입에 정의한 매핑정보를 재정의
  • 단점: 어노테이션을 많이 사용해서 엔티티 코드가 지저분해짐

값 타입과 불변 객체

  • 객체를 불변하게 만들면 값을 수정할 없음
  • 인스턴스의 참조 값 공유를 피할 수 없는 것 마찬가지이지만 참 조값을 공유해도 인스턴스의 값을 수정할 수 없으므로 부작용이 발생하지 않는다.

엔티티 타입과 값 타입

  • 엔티티 타입
    • 식별자가 있다.
    • 생명 주기가 있다.
    • 공유할 수 있다.(참조값 공유 가능)
  • 값 타입
    • 식별자가 없다
    • 생명 주기를 엔티티에 의존한다.
    • 공유하지 않는 것이 안전하다.
      • 값을 복사해서 사용한다.
      • 오직 하나의 주인만이 관리해야 한다.
      • 불변 객체로 만드는 것이 안전하다.

0개의 댓글