[JPA] - Embedded(임베디드)타입이란 무엇인가?

I'm Covy·2023년 11월 20일
1

JPA

목록 보기
2/2

임베디드(Embedded)타입이란?

  • 임베디드 타입이란 새로운 값 타입을 직접 정의하여 사용하는 JPA 방법이다.

임베디드 타입을 사용하면 실제로 JPA에서 테이블의 데이터를 생성할시 원하는 클래스별로 정리하여 사용할 수 있고 Entity클래스 안의 클래스를 정리하여 재사용성면에서도 매우 유용하다

그러면 실제로 아래 코드를 보면서 임베디드 타입이 무엇인지 더 자세하게 들어가보도록 하자

@Entity
@Table(name = "member")
@Getter @Setter
public class Member {

    @Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;

    private String name;

    private String city;
    private String street;
    private String zipcode;

}

위의 코드는 Embedded타입을 사용하지 않고 생성한 Member Entity클래스이다.
Member클래스를 보면 city, street, zipcode는 모두 사용자의 주소를 주입할려고 만들 변수이다. 여러군데에서도 동일하게 사용될 수도 있을것이다.

그렇다 city, street, zipcode는 모두 주소와 연관되어있기때문에 하나의 클래스로 만들어 관리해주면 가독성뿐만 아니라 재사용성에서도 매우 좋을것이다.
이렇게 사용자가 새로운 값 타입을 직접 정의하여 JPA Entity클래스안의 별도의 클래스를 만들어 사용할 수 있는 것이 Embedded타입이다.

@Entity
@Table(name = "member")
@Getter @Setter
public class Member {

    @Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;

    private String name;

    @Embedded
    private Address address;

}
@Embeddable
@Getter
public class Address {

    private String city;
    private String street;
    private String zipcode;
    
}

위의 코드를 보면 Member클래스안의 city, street, zipcode코드가 없어지고 Address라는 클래스를 선언해주면서 @Embedded어노테이션을 추가해 주고
Address라는 클래스는 city, street, zipcode라는 주소에 대한 정보를 가지고 있다 이렇게 Entity클래스 안의 별도의 클래스를 사용하여 생성을 해주어도 맨위의 Member클래스와 동일한 테이블 구조가 생성된다.

그래서 Embedded타입을 왜 사용하는것인데?

  • 코드의 재사용성
  • 코드의 가독성 향상

위처럼 Embedded를 사용하면 주소라는 클래스를 생성하므로써 확실히 해당 클래스안에는 주소와 관련된 내용이 들어있구나 라고 바로 파악할 수 있을 뿐더러 Adrres클래스를 재사용하여 다른 테이블에서도 Address클래스만 선언만 해주면 동일하게 사용이 가능가능하다.

이로서 임베디드(embedded)에 대한 설명을 마치겠습니다.
추가로 부족한 내용이나 잘못된 정보가 있다면 언제든지 알려주시면 감사하겠습니다!

profile
🚀Let's become a growing developer again today!👊

2개의 댓글

comment-user-thumbnail
2023년 11월 24일

Member.address가 있을 때 Member.city 필드를 추가하면 중복 컬럼으로 판단하여 예외가 발생할까요?

1개의 답글