본문 바로가기
JAVA/JPA

인프런 JPA 9화 값 타입 "김영한 강사" -PlusUltraCode-

by PlusUltraCode 2024. 7. 24.
 

JPA의 데이터 타입 분류

1. 엔티티 타입 (Entity Type)

  • 정의: @Entity로 정의하는 객체
  • 특징: 데이터가 변해도 식별자로 지속해서 추적 가능

2. 값 타입 (Value Type)

  • 정의: int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체
  • 특징: 식별자가 없고 값만 있으므로 변경 시 추적 불가
  • 특이사항:
    • 자바의 기본 타입은 절대 공유되지 않음
    • Integer 같은 래퍼 클래스나 String은 참조가 넘어가기 때문에 공유 가능

3. 임베디드 타입 (Embedded Type)

  • 정의: 주소들을 모아 놓은 클래스 혹은 시간을 모아 놓은 클래스들을 의미
  • 사용법: 해당 클래스를 @Entity 클래스에 사용하려면 @Embeddable 또는 @Entity 클래스의 해당 멤버 변수에 @Embedded를 사용
 
@Embeddable
public class Address {
    // 필드 정의
}

@Entity
public class Member {
    @Embedded
    private Address address;
}
  • 주의사항: 임베디드 클래스를 여러 엔티티에서 공유하게 될 경우 부작용 발생 가능
    • 한 엔티티를 수정하면 동일한 레퍼런스를 가지기 때문에 다른 엔티티도 변경됨
    • 이 경우 새 객체를 생성하여 사용해야 함
  • 해결책: 임베디드 클래스를 불변 객체로 만들고, setter를 사용하지 않음

4. 값 타입 컬렉션 (Value Type Collection)

  • 정의: 값 타입 컬렉션은 JPA의 영속성 컨텍스트와 고아 객체 제거 기능을 가짐
  • 사용법: Member 클래스에서 값 타입 컬렉션을 사용하여 데이터를 쉽게 관리할 수 있음
@Entity
public class Member {
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "MEMBER_ID")
    private List<AddressEntity> addressHistory = new ArrayList<>();
}
  • 특징:
    • 값 타입 컬렉션을 사용하면 영속성 전에 컬렉션에 포함된 모든 값이 저장됨
    • 고아 객체 제거 기능으로 컬렉션에서 삭제된 값은 자동으로 삭제됨

요약

JPA의 데이터 타입은 엔티티 타입, 값 타입, 임베디드 타입, 값 타입 컬렉션으로 나뉩니다. 각각의 타입은 서로 다른 특징과 사용법을 가지며, 특히 임베디드 타입과 값 타입 컬렉션은 공유 및 변경에 주의가 필요합니다. 임베디드 타입은 불변 객체로 만들어 부작용을 방지하고, 값 타입 컬렉션은 고아 객체 제거 기능을 활용해 효율적으로 데이터를 관리합니다.