반응형
임베디드 타입은 엔티티의 일부에 별도의 클래스를 사용하여 구현함으로써, 코드를 더 모듈화하고 재사용성을 높이는 방식이다.
임베디드 타입을 사용함으로써 복잡한 속성 그룹을 분리하고 공통 타입을 다양한 엔티티에서 재사용할 수 있다.
이해하기 쉽게 예시를 통해 알아보자.
임베디드 타입을 사용하는 예시
User 엔티티에 다음과 같은 정보가 있다고 가정해보자.
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String username;
private String city;
private String street;
private String zipcode;
...
}
여기서 city, street, zipcode는 주소에 해당된다.
이 필드를 Address라는 클래스로 만들어 임베디드 타입으로 선언하여 사용할 수 있다.
임베디드 타입으로 변경
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
public Address() {}
...
}
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String username;
@Embedded
private Address address;
...
}
임베디드 타입인 클래스에 @Embeddable을 붙여주고 사용하는 엔티티에 @Embedded를 붙여주면 된다.
이제 User 테이블이 어떤식으로 만들어졌는지 확인해자.
Address에 있는 필드 값이 User에 모두 들어가 있는 것을 확인할 수 있다.
위의 예시 처럼 사용자 정보를 입력할 때는 주소, 연락처 등 여러 가지 정보를 입력야 하는데, 이 중에서 주소는 도시, 도로명주소, 우편번호 등으로 구성된다.
이때 Embeddable 타입으로 Address 클래스를 선언해서 중복 코드를 줄일 수 있게 되었다.
임베디드 타입 주의사항
- 기본 생성자가 필수이다.
- 엔티티에서 공유하여 사용하면 부작용이 발생한다.
- 불변적이어야 한다. ( 생성자로만 값을 설정하고 Setter 사용 X )
- 생명주기가 사용된 엔티티에 의존한다.
'◼ JAVA > JPA' 카테고리의 다른 글
[JPA] 사용자 정의 쿼리 작성과 파라미터 바인딩(@Query, @Param) (0) | 2023.06.09 |
---|---|
[JPA] JPQL이란? 사용방법, 기본 문법 총 정리 (1) | 2023.06.09 |
[JPA] Entitiy에서 왜 Setter를 사용하지 말라고 할까? (0) | 2023.06.08 |
[JPA] 영속성 전이(cascade)와 고아객체(orphalRemoval)란? (0) | 2023.06.07 |
[JPA] 상속관계 매핑, 매핑 정보 상속에 대해 알아보자. (0) | 2023.06.07 |