값 타입

Sangkyeong Lee·2021년 5월 19일

[인프런]JPA

목록 보기
8/8

인프런 강의 < 자바 ORM 표준 JPA 프로그래밍 - 기본편 > 정리


엔티티 타입

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

기본값 타입

  • int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체
  • 식별자가 없고 값만 있으므로 변경시 추적 불가
  • 생명주기가 엔티티에 의존한다.
    • 회원을 삭제하면 이름 나이(기본값) 필드도 함께 삭제
  • 값 타입은 공유하지 않는다.

임베디드 타입

  • 새로운 값 타입을 직접 정의할 수 있다.
  • JPA는 임베디드 타입이다.
  • int, String과 같은 값 타입

사용법은 값 타입을 정의하는 곳에 @Embeddable, 값 타입을 사용하는 곳에 @Embedded를 사용하며, 기본 생성자가 필요하다.

  • 위 그림과 같이 묶어낼 수 있는 속성들을 모아서 임베디드 타입이라고 한다.

해당 엔티티를 테이블과 매핑을 하는 방법은 아래 그림과 같다.


임베디드 타입 장점

  • 재사용성
  • 높은 응집도
  • Period.isWork() 처럼 해당값 타입만 사용하는 의미 있는 메소드 구현 가능
  • 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티티에 생명주기를 의존함

값 타입과 불변 객체

임베디드 타입 같은 값 타입을 여러 엔티티에서 공유하면 위험하다.

값 타입의 실제 인스턴스인 값을 공유하는 것을 위험하므로 대신 값을 복사해서 사용한다.

불변 객체

  • 객체 타입을 수정할 수 없게 애초에 부작용을 차단한다.
  • 값 타입은 불변객체로 설계해야한다.
  • 생성자로만 값을 설정하고 setter를 만들지 않는다.

값을 바꾸고 싶을때는 기존 객체에서 바꾸고 싶지 않은 정보는 get으로 가져오고 수정하고 싶은 파라미터만 수정해서 새로운 객체를 생성한다.

값 타입의 비교

값 타입은 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 본다.

동일성 비교: 인스턴스의 참조 값을 비교, ==사용
동등성 비교: 인스턴스의 값을 비교, equals()사용

값 타입 컬렉션

  • 값 타입을 하나 이상 저장할 때 사용
  • @ElementCollection, @CollectionTable 사용
  • 데이터베이스는 컬렉션을 같은 테이블에 저장할 수 없다.
  • 컬렉션을 저장하기 위한 별도의 테이블이 필요하다.

  • 값 타입 컬렉션도 지연 로딩 전략을 사용한다.
  • 값 타입 컬렉션은 영속성 Cascade + 고아 객체 제거 기능을 필수로 가진다.

< 자료 출처: 자바 ORM 표준 JPA 프로그래밍 - 기본편 >

profile
💻Backend Developer

0개의 댓글