[JPA] 임베디드 타입

6720·2023년 12월 12일
0

이거 모르겠어요

목록 보기
33/38

임베디드 타입

Embedded Type

직접 정의해서 사용하는 타입

사용법

  • @Embeddable: 값 타입을 정의하는 곳
  • @Embedded: 값 타입을 사용하는 곳
@Entity
public class Member {
	@Id @GeneratedValue
	private Long id;
	private String name;
	
	@Embedded
	private Address address;
}
@Embeddable
public class Address {
	private String address1;
	private String address2;
	private String address3;

	public Address() {
	}

	public Address(String address1, String address2, String address3) {
		this.address1 = address1;
		this.address2 = address2;
		this.address3 = address3;
	}
}

엔티티와 임베디드 타입 관계는 UML 상에서는 컴포지션(composition) 관계임.
(hibernate는 임베디드 타입을 컴포넌트(components)라고 함.)


+) 임베디드 타입은 기본 생성자를 필수적으로 요구하므로 사용하지 않아도 추가해야 함.

컴포지션과 컴포넌트

Composition & Component

  • 컴포지션: 클래스를 구성하는 부분의 합
  • 컴포넌트: 여러 개의 프로그램 함수들을 모아 하나의 특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위

사용하는 이유

  • 재사용성이 높음
  • 응집도가 높음
  • 해당 값 타입만 사용하는 의미있는 메서드를 만들 수 있음.

임베디드 타입과 매핑

임베디드 타입은 엔티티의 값일 뿐임.
-> 값이 속한 엔티티의 테이블에 매핑함. (임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같음.)

임베디드 타입은 객체와 테이블을 아주 세밀하게 매핑하는 것이 가능함.

참고 자료

https://gist.github.com/taekwon-dev/707fc153a45c2281b1609c03a0b1c934
https://velog.io/@conatuseus/JPA-%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C-%ED%83%80%EC%9E%85embedded-type-8ak3ygq8wo
https://velog.io/@vino661/%EC%83%81%EC%86%8D%EA%B3%BC-%EC%BB%B4%ED%8F%AC%EC%A7%80%EC%85%98%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C#%EC%83%81%EC%86%8Dinheritance%EA%B3%BC-%EC%BB%B4%ED%8F%AC%EC%A7%80%EC%85%98composition

profile
뭐라도 하자

0개의 댓글