임베디드 타입(Embedded Type)이란?
엔티티의 데이터 타입 분류로는 기본값 타입, 임베디드 타입, 컬렉션 값 타입 3가지가 존재한다. 그 중 임베디드 타입에 대해서 알아보고자 한다. 임베디드 타입은 관계형 데이터베이스에서 특정 엔티티에 속하는 복합적인 속성들을 그룹화하여 표현하는 방법이다.
임베디드 타입은 언제 사용할까?
1. 복합 속성의 그룹화
특정 엔터티에 속하는 여러 속성이 논리적으로 그룹화될 때 Embedded 타입을 사용할 수 있다. 예를 들어, 주소, 연락처, 또는 기타 복합적인 속성 그룹이 있을 경우 이를 하나의 클래스로 정의하고 해당 클래스를 Embedded 타입으로 사용할 수 있다.
2. 코드의 재사용성
여러 엔터티에서 동일한 속성 그룹이 사용될 경우, Embedded 타입을 이용하여 해당 속성을 하나의 클래스로 정의하고 필요한 엔터티에서 재사용할 수 있다.
3. 데이터 정규화 및 구조화
데이터베이스 테이블의 구조를 더 정형화하고 관리하기 쉽게 만들 수 있다. 복잡한 엔터티를 여러 개의 테이블로 나누어 각 테이블에 Embedded 타입으로 표현된 부분을 저장할 수 있다.
4. 가독성 향상
엔티티 클래스의 가독성을 향상시키고 필드의 의미를 명확하게 전달할 수 있다. 특히, 여러 엔터티에서 공통적으로 사용되는 복합적인 속성이 있을 때, Embedded 타입을 사용하면 코드를 더 명확하게 유지할 수 있다.
5. 객체 모델과 데이터베이스 모델의 일치
객체 지향 프로그래밍 언어에서는 객체 모델을 사용하고, 데이터베이스에서는 테이블 구조를 사용한다. 이 두 모델 간의 일치를 유지하면서, 객체 지향 프로그래밍에서의 개념을 데이터베이스에 매끄럽게 매핑하기 위해 Embedded 타입을 사용할 수 있다.
입베디드 타입 사용하는 방법
@Embeddable
class Address {
private String street;
private String city;
private String zipCode;
}
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Address address;
}
Person person = new Person();
person.setName("John Doe");
Address address = new Address();
address.setStreet("123 Main St");
address.setCity("Anytown");
address.setZipCode("12345");
person.setAddress(address);
입베디드 타입 사용 시 주의할 점
임베디드 타입에 Null을 넣게 되면 임베디드 타입 안에 있는 모든 필드값이 Null이 된다.
Reference
'JPA' 카테고리의 다른 글
[JPA] Lazy Loading 지연로딩 (0) | 2024.02.27 |
---|