본문 바로가기
백엔드/Spring

[JPA] @Embedded, @Embeddable

by 작은소행성 2022. 9. 14.

임베디드 타입(Embedded type)

JPA에서 새로운 값 타입을 직접 정의해서 사용하는 것을 임베디드 타입이라고 한다. 

임베디드 타입도 int, String 처럼 값 타입이다. 

 

임베디드를 사용하지 않았을 때 

@Entity
public class User {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    private String phone;

    // address
    private String city;

    private String country;

    private String zipcode;
    
    // standard getters, setters
}

 

User가 상세한 데이터(주소)를 그대로 가지고 있는 것은 객체지향적이지 않으면 응집력만 떨어진다. 

 

 

임베디드 사용하기 

  • @Embeddable : 클래스가 다른 엔티티에 의해 포함됨
  • @Embedded : 다른 엔티티에 포함하는데 사용 
  • 임베디드 타입은 기본 생성자 필수 
@Entity
public class User {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    private String phone;

    @Embedded
    private Address address;

    // standard getters, setters
}
@Embeddable
public class Address {

    private String city;

    private String country;

    private String zipcode;

    // standard getters, setters
}

 

임베디드의 장점 

  • 재사용 가능
  • 높은 응집도 

 

정리

임베디드 타입 덕분에 객체와 테이블을 세밀하게 매핑하는 것이 가능하다. 

잘 설계한 ORM 애플리케이션은 매핑한 테이블의 수보다 클래스의 수가 더 많다. 

 

참고

[Book] 자바 ORM 표준 JPA 프로그래밍

반응형