728x90
๐ก
Java์์ ์ฃผ์ ์ ๋ณด์ ๊ฐ์ ๊ทธ๋ฃนํํ ์ ์๋ ํ๋๋ฅผ ์ถ๊ฐํ ๋ ๋ณดํต @Embedded ์ ๋ํ ์ด์ ๋๋ private static ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค. ๋ ์ ๊ทผ ๋ฐฉ์์๋ ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋ง๊ฒ ์ ํํ๋ ๊ฒ์ด ์ข๋ค.
์ด ๊ธ์์๋ ๊ฐ ๋ฐฉ์์ ์ฌ์ฉ ์๋๋ฆฌ์ค์ ๊ทธ์ ๋ฐ๋ฅธ ์ฅ๋จ์ ์ ๋น๊ตํด๋ณด๊ฒ ๋ค.
@Embedded ์ ๋ํ ์ด์ ์ฌ์ฉ ์๋๋ฆฌ์ค
- @Embedded ์ ๋ํ ์ด์ ์ ์ฃผ๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ JPA ๊ธฐ๋ฐ์ ๊ตฌํ์ฒด์์ ์ฌ์ฉ๋๋ค.
- ์ฃผ์, ์ด๋ฆ ๋ฑ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ์์ฑ์ ๋ณ๊ฐ์ ํด๋์ค๋ก ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๋ชจ๋ํ๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์๋ค.
์์ ์ฝ๋
// Member
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Document(collection = "member")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
private String phoneNumber;
private String hobby;
@Embedded
private Address address;
// ์์ฑ์ ๋ฉ์๋
public Member(String name, int age, String phoneNumber, String hobby, Address address) {
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
this.hobby = hobby;
this.address = address;
}
}
// Address
@Embeddable
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Address {
private String city;
private String street;
private String zipcode;
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
}
์ฅ์
์ฝ๋ ๋ชจ๋ํ & ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
- ๊ณตํต ์์ฑ์ ๋ณ๋์ ํด๋์ค๋ก ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์์ด ์ฝ๋๊ฐ ๊น๋ํ๊ฒ ์ ๋ฆฌ๋๋ฉฐ ์ฌ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๋ค.
๋ณตํฉ ๊ฐ ํ์ ์ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌ
- @Embedded ์ ๋ํ ์ด์ ์ ์ด์ฉํ๋ฉด ํด๋์ค ๊ฐ ๊ด๊ณ๋ฅผ ์ฌ์ฉ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๊ฒ ์ ์ํ ์ ์๋ค.
๋จ์
๊ฒฐํฉ๋ ์ฆ๊ฐ
- ๋น์ฐํ ์๊ธฐ์ง๋ง ๊ด๋ จ๋ ํด๋์ค ๊ฐ ๊ฒฐํฉ๋๊ฐ ์๋์ ์ผ๋ก ๋์์ง๋ค.
์์กด์ฑ ์ฆ๊ฐ
- @Embedded ์ ๋ํ
์ด์
์ JPA ๊ธฐ๋ฐ์ ๊ตฌํ์ฒด์ ์์กด์ ์ด๋ค.
- @Embedded ์ ๋ํ ์ด์ ์ JPA๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ ๋๋ ๊ตฌํ์ฒด์์๋ง ์ฌ์ฉํ ์ ์๋ค.
@Embedded ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- JPA๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ ๊ณตํต ์์ฑ(๊ทธ๋ฃนํ ๊ฐ๋ฅํ ํ๋)์ ๋ชจ๋ํ ํ๊ณ ์ถ์ ๋
- ๋ณตํฉ ๊ฐ ํ์ ์ ๋ค๋ฅธ ํด๋์ค์ ํจ๊ป ์ฌ์ฉํ๊ณ ์ ํ ๋
private static ํด๋์ค ์ฌ์ฉ ์๋๋ฆฌ์ค
- private static ํด๋์ค๋ ์ฃผ๋ก ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
- ์ด ๊ฒฝ์ฐ์๋ ์ธ๋ถ ํด๋์ค์์ ์์กด์ฑ์ด ์ค์ด๋ค๊ณ ์บก์ํ๋ฅผ ๊ฐํํ ์ ์๋ค.
์์ ์ฝ๋
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Document(collection = "member")
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
private String phoneNumber;
private String hobby;
private Address address;
// ์์ฑ์ ๋ฉ์๋
public Member(String name, int age, String phoneNumber, String hobby, Address address) {
this.name = name;
this.age = age;
this.phoneNumber = phoneNumber;
this.hobby = hobby;
this.address = address;
}
// static inner class
private static class Address {
private final String city;
private final String state;
private final String country;
// ์์ฑ์๋ private์ผ๋ก ์ค์ ํ์ฌ ์ธ๋ถ์์ ์ ๊ทผ ๋ชปํ๊ฒ ๋ง์
private Address(String city, String state, String country) {
this.city = city;
this.state = state;
this.country = country;
}
// ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ฌ์ฉ
public static Address AddAddress(String city, String state, String country) {
return new Address(city, state, country);
}
}
}
์ฅ์
๋์ ์บก์ํ
- ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ ์ธ๋ถ ํด๋์ค์ ์์กดํ์ง ์๊ณ ๋ด๋ถ ํด๋์ค๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
๊ฐ๊ฒฐํ ์ฝ๋
- ํด๋น ํด๋์ค ๋ด์์๋ง ๊ตฌํ์ด ํ์ํ ๊ฒฝ์ฐ, ์ ์ฒด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ์ฌ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ณ , ๊ฐ๋ ์ฑ ์ญ์ ์ฌ๋ผ๊ฐ๋ค.
๋จ์
ํ์ฅ์ฑ ์ ํ
- private static ํด๋์ค๋ ํด๋น ํด๋์ค ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฏ๋ก ํ์ฅ์ฑ์ด ๋จ์ด์ง๋ค.
์ฌ์ฌ์ฉ์ฑ ๊ฐ์
- ๋ค๋ฅธ ๊ณณ์์ ํด๋น ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์์นซํ๋ค๊ฐ๋ ์ฝ๋์ ์ค๋ณต์ด ๋ฐ์ํ ์ ์๋ค.
private static ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๊ณ ์ธ๋ถ์์ ์ ๊ทผ์ด ํ์ํ์ง ์์ ์ผ๋ถ ์์ฑ์ด ์์ ๋
- ์ธ๋ถ ํด๋์ค์์ ์์กด์ฑ์ ์ค์ด๊ณ ์บก์ํ๋ฅผ ๊ฐํํ๋ ค๊ณ ํ ๋
๊ฒฐ๋ก
- ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ์ํฉ๊ณผ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฅ์ ์ ๊ฐ์ง๋ค.
- JPA ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ ๋ฑ ์ผ๋ฐ์ ์ธ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ @Embedded ์ ๋ํ
์ด์
์ ์ฌ์ฉํด ๊ณตํต ์์ฑ์ ๋ชจ๋ํ ํ๋ ๊ฒ์ด ์ ์ฉํ๋ค.
- ์ฝ๋์ ๋ชจ๋ํ๋ฅผ ํตํด ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ง์ฝ ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ์์ฑ์ ์บก์ํํ๋ ๋ฐ์ ์ง์คํ๊ฑฐ๋ ๋น๊ต์ ๊ฐ๋จํ ๊ตฌํ์ด๋ ํ ์คํธ ์ฝ๋ ์์ฑ ๋ฑ์ ์์ ์์๋ private static ํด๋์ค๊ฐ ๋ ์ ํฉํ๋ค.
์ฐธ๊ณ
๋คผํผ
728x90