๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅDEV/Java || Spring

@Embedded์™€ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž

by bdd 2022. 7. 14.

๊ฐ„๋‹จํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ณ ๋ฏผํ•˜๊ณ  ์‚ฝ์งˆ(?) ๋‚ด์šฉ์— ๋Œ€ํ•ด ๊ณต์œ ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’ ๊ฐ์ฒด ๋‚ด๋ถ€์— ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ๋ฐ์š”, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํ˜ธ์ถœํ•˜์ง€ ๋ง๋ผ๊ณ  ์ž˜ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ? ๋ฅผ ๊ณ ๋ฏผํ–ˆ๋˜ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. **๊ฒฐ๋ก ์€ ์ฃผ์„ ๋ง๊ณ ๋Š” ์—†๋‹ค ์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

1. @Embedded ์™€ ๋‚ด๊ฐ€ ํ–ˆ๋˜ ์‹ค์ˆ˜


์ œ๊ฐ€ ํ–ˆ๋˜ ๊ณ ๋ฏผ๊ณผ ์‹ค์ˆ˜์— ๋Œ€ํ•ด ๋‚ด์šฉ์ธ๋ฐ์š”, JPA์—์„œ @Embedded, @Embeddable์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด protected ์ด์ƒ์˜ ๋นˆ ์ƒ์„ฑ์ž๋ฅผ ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—”ํ‹ฐํ‹ฐ์—์„œ ๋นˆ ์ƒ์„ฑ์ž๋ฅผ ๋ฐ˜๋“œ์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ๋ฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€๋„ ์•Š๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

 

 

 

 

 

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธธ ์›ํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ž˜๋ชป ํ˜ธ์ถœํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ๋ง‰๊ณ  ์‹ถ์—ˆ๊ณ  ์ฒ˜์Œ์—๋Š” AssertionError( )๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ๋ฐฉ์–ดํ•˜๋ ค ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ AssertionError์˜ ๊ฒฝ์šฐ ์–ด๋–ค ๊ฒƒ์„ ๊ฒ€์ฆํ•˜๋ ค๊ณ  ํ–ˆ๋Š”์ง€ ์˜๋„๊ฐ€ ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. **Assertion์ธ๋ฐ ์–ด๋–ค ๊ฒƒ์„ ๊ฒ€์ฆํ•˜๋ คํ•˜์ง€..?

 

 

 

 

 

 

๊ทธ๋ž˜์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ ์ ˆํ•œ ์˜ˆ์™ธ๋ฅผ ์ฐพ์•„๋ณด๋Š”๋ฐ์š”, ์ƒ๊ฐ๋ณด๋‹ค ๋งˆ์Œ์— ๋“œ๋Š” ์˜ˆ์™ธ๋ฅผ ์ฐพ์„ ์ˆ˜๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์˜ˆ์™ธ๋“ค์€ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์— ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ์•ผ ํ–ˆ์ง€๋งŒ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ new ์—ฐ์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. **์ƒ์„ฑ์ž ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋”๋ผ๋„ new ์—ฐ์‚ฐ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

 

๋‹จ, IllegalStatementException์€ requested operation์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ๊ทผ์ ‘ํ•œ ์˜ˆ์™ธ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

 

 

 

 

๊ทธ๋ž˜์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์˜๋„๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ์ •์˜ํ•ด ๋‚ด๋ถ€์— ์„ ์–ธํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด AssertionError์— ๋น„ํ•ด ์˜๋„๋ฅผ ์กฐ๊ธˆ ๋” ๋ช…ํ™•ํžˆ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ์—ฌ๊ธฐ๋‹ค ์ฃผ์„๊นŒ์ง€ ์จ์ฃผ๊ฒŒ ๋˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„ํ–ˆ๋˜ ๋‚ด์šฉ์„ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 

 

 

 

 

Nullary Constructor

์ถ”๊ฐ€๋กœ Nullary Constructor๋ผ๋Š” ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ์š”, ์•„๋ฌด ์ธ์ž๋„ ๋ฐ›์ง€ ์•Š๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. 

 

 

 

 

 

 

 

2. ์˜ค๋ฅ˜


ํ•˜์ง€๋งŒ ์ด๋Š” ์™„์ „ํžˆ ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ•์ด์—ˆ๋Š”๋ฐ์š”, ์—”ํ‹ฐํ‹ฐ์—(๊ฐ’ ๊ฐ์ฒด)๋Š” protected ์ด์ƒ์˜ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์ƒ์„ฑ์ž ๋‚ด๋ถ€์— ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ฉด ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์— ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ๊ฐ’ ๊ฐ์ฒด์™€ ์ปจํŠธ๋กค๋Ÿฌ, ์„œ๋น„์Šค, DTO๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

 

 

์œ„ ์„ค์ •์œผ๋กœ ํฌ์ŠคํŠธ ๋งจ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ฆ‰, ๊ฐ’ ๊ฐ์ฒด์—๋„ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๋‚ด์šฉ์œผ๋กœ TagName์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž์—์„œ ์˜ˆ์™ธ๋ฅผ ์ •์˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. 

 

 

 

 

 

 

์ด๋ฅผ ์ฃผ์„์ฒ˜๋ฆฌํ•˜์ž ์ •์ƒ์ ์œผ๋กœ ์ž˜ ๋™์ž‘ํ–ˆ๋Š”๋ฐ์š”, ๋”ฐ๋ผ์„œ ์ด์ „์— ์‹œ๋„ํ–ˆ๋˜ ๋ฐฉ๋ฒ•๋“ค์€ ์žŠ๊ณ  ์ง€์›Œ๋ฒ„๋ฆฌ๊ณ  ์ฃผ์„์œผ๋กœ ์ด๋ฅผ ๋‚˜ํƒ€๋ƒˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

3. Conclusion


์—”ํ‹ฐํ‹ฐ๊ฐ€ ์•„๋‹Œ ๊ฐ’ ๊ฐ์ฒด(@Embedded)๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋‚ด๋ถ€์— ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋Š” ๋ฐ˜๋“œ์‹œ ์ •์˜ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ƒ์„ฑ์ž์— ์˜ˆ์™ธ๋ฅผ ์ •์˜ํ•ด๋„ ๋™์ž‘์€ ํ•˜์ง€๋งŒ ์ด๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์—”ํ‹ฐํ‹ฐ ๋‚ด๋ถ€์— ์˜ˆ์™ธ๋ฅผ ์ •์˜ํ•ด๋„ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ๋‚ด๋ถ€์— ์˜ˆ์™ธ๋ฅผ ์„ ์–ธํ•ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ ์ฃผ์„์œผ๋กœ ์ด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ง๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. 

 

 

 

 

๋Œ“๊ธ€