기본값 타입

Shaun·2021년 11월 1일
1

JPA

목록 보기
22/31

Jpa의 데이터 타입에서는 크게 두가지가 있다

1. 엔티티타입
2. 값타입

1. 엔티티타입

  • @Entity로 정의하는 객체

  • 데이터가 변해도 식별자로 지속해서 추적가능
    -> pk만 있으면 해당 정보가 바뀌어도 구별 할수 있다

2.값 타입

  • int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입

  • 식별자가 없고(pk) 값만 있으므로 변경시 추적 불가

-> 10 -> 20 으로 변경하면 그 값 자체가 바뀌므로 그 이전값을 알수 없다.

  • 값 타입은 크게 기본값타입, 임베디드 타입, 컬렉션 값 타입 으로 나누어진다.

기본값 타입

  • String name, int age....

  • 생명주기를 엔티티의 의존
    -> 회원을 삭제하면 이름, 나이 필드도 삭제

  • 값 타임은 공유하면 안된다
    -> 회원 이름 변경시 다른 회원의 이름도 함께 변경되면 안된다

기본타입은 절대 공유 x , 하지만 래퍼 클래스는 같은 인스턴스를 공유하므로 공유 가능한 객체이지만 변경 x

-> 이것들이다 자바를 사용할때 사이트 이펙트 없이 안전하게 개발할수 있는 이유

임베디드 타입

  • 쉽게 말해 공통점이 있는 값들을 묶어서 사용하는 값.

  • 복합 값 타입이라고도 하며 새로운 값 타입을 직접 정의할 수 있다.

  • 코드를 보면 공통점을 찾아 묶을수 있다. 따로 묶어서 클래스로 만들어 보자.



  • 각각 공통점이 있는 값들끼리 묶어서 클래스로 만들어 준뒤 @Embeddable, 해당 값들이 선언되있는 부분에는 @Embedded 를 써준다.
  • 객체를 생성할때 임베디드 값 기본 생성자는 필수이다.

그러면 임베디드 타입은 왜 쓸까???

  • 높은 응집력 및 재사용성

  • Period.isWork()처럼 해당 값 타입만 사용하는 의미 있는 메소
    를 만들 수 있음

  • 임베디드 타입은 엔티티의 값일 뿐이다.

  • 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다.

  • 객체와 테이블을 아주 세밀하게(find-grained) 매핑하는 것이 가

  • 잘 설계한 ORM 애플리케이션은 매핑한 테이블의 수보다 클래
    스의 수가 더 많음

★ 임베디드 타입의 값이 null이면 매핑한 컬럼 값은 모두 null

profile
호주쉐프에서 개발자까지..

0개의 댓글