값 타입은 JPA 강의를 보면서 엔티티를 정의할 때 Value Type이 명시 되어 있어서 자세히 알아보고자 정리하게 되었다.
Value Type
값 타입은 자바에서 다루는 원시 타입(Primitive Type)으로 int, Integer, String 등을 의미한다.
값 타입은 3가지로 나눌 수 있다.
- 기본값 타입(basic value type)
String, int, Integer 등 자바에서 제공하는 원시 타입 및 래퍼 클래스 타입 - 임베디드 타입(embedded type)
JPA에서 사용자가 직접 정의한 값 타입 - 컬렉션 값 타입(collection value type)
하나 이상의 값 타입을 저장할 때 사용
기본값 타입
@Entity
public class Member {
@Id
// ... (생략)
private String state;
private String city;
private String zipCode;
}
값 타입은 엔티티에 의존하므로 다른 곳에 공유해선 안 된다.
다른 엔티티에서 Member 엔티티에서 city 값을 변경할 수 있으면 추적이 힘들어진다는 단점이 있다.
임베디드 타입
JPA에서 새로운 값 타입을 직접 정의해서 사용하는 것을 의미한다.
@Entity
public class Member {
@Id
// ... (생략)
@Embedded
private Address address;
}
@Getter
@Embeddable
@NoArgsConstructor
@AllArgsConstructor
public class Address {
private String state;
private String city;
private String zipCode;
}
임베디드 타입 정의는 어노테이션으로 하였고, 하나의 클래스에 모두 적용할 필요 없는 한 곳에만 정의해도 문제없다. 예를 들어, Member 클래스에 있는 private Address address;에 어노테이션만 추가해도 정상 동작한다.
모든 값들을 기본값 타입으로 선언에 대해 생각할 수 있는데, 그렇게 되면 알아보기 힘들고 객체애 대한 응집도가 떨어진다. 관련도니 기본값 타입을 클래스로 묶어 임베디드 타입으로 선언하게 되면 코드가 좀 더 명확해지는 장점이 있다.
값 타입 컬렉션
값 타입 하나 이상을 저장하기 위해 값 타입 컬렉션을 사용한다.
ref)
엔티티(Entity)와 값 타입(Value Type)
JPA의 데이터 타입을 가장 크게 분류하면 엔티티(Entity) 타입과 값(Value) 타입으로 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String처럼 단순히 값으로 사용하는
devbksheen.tistory.com
'Programming > Java' 카테고리의 다른 글
[JAVA] 메모리 누수 확인 도구 (0) | 2024.12.29 |
---|---|
[JPA] 영속성 컨텍스트(Persistence Context) (0) | 2024.03.11 |
[JPA] 패러다임 불일치 - 우린 달라 달라 (0) | 2024.02.19 |
[JPA] JPA 시작 - SQL 잘 작성하는 개발자 (0) | 2024.02.17 |
[Java] 패키지 구조 (0) | 2023.12.20 |
값 타입은 JPA 강의를 보면서 엔티티를 정의할 때 Value Type이 명시 되어 있어서 자세히 알아보고자 정리하게 되었다.
Value Type
값 타입은 자바에서 다루는 원시 타입(Primitive Type)으로 int, Integer, String 등을 의미한다.
값 타입은 3가지로 나눌 수 있다.
- 기본값 타입(basic value type)
String, int, Integer 등 자바에서 제공하는 원시 타입 및 래퍼 클래스 타입 - 임베디드 타입(embedded type)
JPA에서 사용자가 직접 정의한 값 타입 - 컬렉션 값 타입(collection value type)
하나 이상의 값 타입을 저장할 때 사용
기본값 타입
@Entity
public class Member {
@Id
// ... (생략)
private String state;
private String city;
private String zipCode;
}
값 타입은 엔티티에 의존하므로 다른 곳에 공유해선 안 된다.
다른 엔티티에서 Member 엔티티에서 city 값을 변경할 수 있으면 추적이 힘들어진다는 단점이 있다.
임베디드 타입
JPA에서 새로운 값 타입을 직접 정의해서 사용하는 것을 의미한다.
@Entity
public class Member {
@Id
// ... (생략)
@Embedded
private Address address;
}
@Getter
@Embeddable
@NoArgsConstructor
@AllArgsConstructor
public class Address {
private String state;
private String city;
private String zipCode;
}
임베디드 타입 정의는 어노테이션으로 하였고, 하나의 클래스에 모두 적용할 필요 없는 한 곳에만 정의해도 문제없다. 예를 들어, Member 클래스에 있는 private Address address;에 어노테이션만 추가해도 정상 동작한다.
모든 값들을 기본값 타입으로 선언에 대해 생각할 수 있는데, 그렇게 되면 알아보기 힘들고 객체애 대한 응집도가 떨어진다. 관련도니 기본값 타입을 클래스로 묶어 임베디드 타입으로 선언하게 되면 코드가 좀 더 명확해지는 장점이 있다.
값 타입 컬렉션
값 타입 하나 이상을 저장하기 위해 값 타입 컬렉션을 사용한다.
ref)
엔티티(Entity)와 값 타입(Value Type)
JPA의 데이터 타입을 가장 크게 분류하면 엔티티(Entity) 타입과 값(Value) 타입으로 나눌 수 있다. 엔티티 타입은 @Entity로 정의하는 객체이고, 값 타입은 int, Integer, String처럼 단순히 값으로 사용하는
devbksheen.tistory.com
'Programming > Java' 카테고리의 다른 글
[JAVA] 메모리 누수 확인 도구 (0) | 2024.12.29 |
---|---|
[JPA] 영속성 컨텍스트(Persistence Context) (0) | 2024.03.11 |
[JPA] 패러다임 불일치 - 우린 달라 달라 (0) | 2024.02.19 |
[JPA] JPA 시작 - SQL 잘 작성하는 개발자 (0) | 2024.02.17 |
[Java] 패키지 구조 (0) | 2023.12.20 |