본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다.
목차
- 기본값 타입
임베디드 타입(복합 값 타입)(중요!)
- 값 타입과 불변 객체
- 값 타입의 비교
값 타입 컬렉션(중요!)
- 실전 예제 - 6. 값 타입 매핑
JPA의 데이터 타입 분류
- 엔티티 타입
- @Entity로 정의하는 객체
- 데이터가 변해도 식별자로 지속해서 추적 가능
- 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능
- 값 타입
- int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체
- 식별자가 없고 값만 있으므로 변경시 추적 불가
- 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체
값 타입 분류
기본값 타입
- 자바 기본 타입(int, double: primitive type)
- 래퍼 클래스(Integer, Long)
- String
임베디드 타입
(embedded type, 복합 값 타입)- 임베디드 타입과 컬렉션 값 타입은 JPA에서 정의를 해서 사용해야된다. x, y와 좌표를 묶어서 쓰고 싶다할때 Position클래스를 만들 수 있다. 그때 Position을 뭔가 값처럼 쓰고 싶을때 사용하는데 임베디드 타입이다
컬렉션 값 타입
(collection value type)- 자바 컬렉션에 기본값타입이나 임베디드 타입을 넣을 수 있는 것이다.
기본값 타입
- 예): String name, int age
- 생명주기를 엔티티의 의존
- 예) 회원을 삭제하면 이름, 나이 필드도 함께 삭제
- 값 타입은 공유하면X
- 예) 회원 이름 변경시 다른 회원의 이름도 함께 변경되면 안됨(side-effect)
참고: 자바의 기본 타입은 절대 공유X
- int, double 같은 기본 타입(primitive type)은 절대 공유X
- 기본 타입은 항상 값을 복사함
- 클래스는 레퍼런스를 복사해서 넘겨주기에 공유가 됨
- Integer같은 래퍼 클래스나 String 같은 특수한 클래스는 공유 가능한 객체이지만 변경X