๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Spring] DTO ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผํ• ๊นŒ ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐’๐ฉ๐ซ๐ข๐ง๐ 

[Spring] DTO ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผํ• ๊นŒ

๐ŸคRyusun๐Ÿค 2024. 3. 8. 01:26

dto ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผ์„ ์ •๋ง ๋งŽ์ด ํ–ˆ๋‹ค.

๋‚˜์˜ ๋ฐฉ๋ฒ•์ด ์ •๋‹ต์ด ์•„๋‹ˆ์ง€๋งŒ ๋‚˜์™€ ๊ฐ™์€ ๊ณ ๋ฏผ์„ ํ•˜๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ณ ๋ฏผ์„ ๊ธฐ๋กํ•ด๋ณธ๋‹ค.

 

 

๐Ÿ˜“ ๊ณ ๋ฏผ์˜ ์„œ๋ง‰

 

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋งŽ์€ dto ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

๊ทธ๋ž˜์„œ ์ฒ˜์Œ์—๋Š” ๋น„์Šทํ•œ dto ๊ฐ์ฒด๋“ค์„ InnerStaticClass ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜์˜€๋‹ค.

 

์šฐ์„  InnerStaicClass ๋ฅผ ์•Œ์•„๋ณด์ž

 

 

๐Ÿ”InnerStaicClass

 

๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์™ธ๋ถ€ ํด๋ž˜์Šค์™€ ๋‚ด๋ถ€ ํด๋ž˜์Šค๊ฐ€ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋‚ด๋ถ€ ํด๋ž˜์Šค์—์„œ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋กœ ๊ด€๋ จ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด์„œ ์ฝ”๋“œ์˜ ์บก์Šํ™”๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
  • ์™ธ๋ถ€์—์„œ๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

static์ด ๋ถ™์ง€ ์•Š์•˜์„ ๋•Œ ๋‹จ์ 

  • ์ฐธ์กฐ๊ฐ’์„ ๋‹ด์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์‹œ ์‹œ๊ฐ„์ , ๊ณต๊ฐ„์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ๋‚ฎ์•„์ง„๋‹ค
  • ์™ธ๋ถ€ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ธ์Šคํ„ด์Šค ์ˆ˜๊ฑฐ๋ฅผ ํ•˜์ง€ ๋ชปํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

Static inner class๋ฅผ ์ƒ์„ฑํ• ๋•Œ๋Š” ์ผ๋ฐ˜์ ์ธ static ๋ฉค๋ฒ„์— ์ ‘๊ทผํ• ๋•Œ์™€ ๊ฐ™์ด ํด๋ž˜์Šค๋ช….๋ฉค๋ฒ„๋ช…์œผ๋กœ ์ ‘๊ทผํ•ด์„œ ์ƒ์„ฑํ•œ๋‹ค.

Instance inner class์™€ ๋‹ฌ๋ฆฌ outer class์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

dto ์ˆ˜๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค๋ฉด InnerStaticClass๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ์„ฑํ•ด๋„ ์ข‹๋‹ค.

ํ•˜์ง€๋งŒ dto ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ํ™•์žฅ์„ฑ์— ๋ฌธ์ œ๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‚˜๋Š” builder ํŒจํ„ด์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 

๐Ÿ”Builder ํŒจํ„ด

 

Builder ํŒจํ„ด์˜ ์žฅ์ 

  • ๊ฐ ์ธ์ž์˜ ์˜๋ฏธ๋ฅผ ์•Œ๊ธฐ ์‰ฝ๋‹ค.
  • ํ”Œ๋ฃจ์–ธํŠธ API ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹์„ ํ•œ๋‹ค.
  • setter ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ(immutable) ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 
  • ํ•œ ๋ฒˆ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๊ฐ์ฒด ์ผ๊ด€์„ฑ(consistency)์ด ๊นจ์ง€์ง€ ์•Š๋Š”๋‹ค.
  • build() ๋ฉ”์†Œ๋“œ์—์„œ ์ž˜๋ชป๋œ ๊ฐ’์ด ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด ์ƒ์„ฑ์— ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋‹ค.
  • ๊ณ„์ธต์ ์œผ๋กœ ์„ค๊ณ„๋œ ํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.
  • ์ ์ธต์  ์ƒ์„ฑ์ž๋ณด๋‹ค ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์“ฐ๊ธฐ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ณ , ์ž๋ฐ”๋นˆ์ฆˆ ๋ณด๋‹ค ํ›จ์”ฌ ์•ˆ์ „ํ•˜๋‹ค.

๋‹จ์ 

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

 

๋‹จ์ ์ด ํด๋ž˜์Šค์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค๋Š”๊ฒƒ์ธ๋ฐ... ๊ทธ๋ž˜๋„ ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋‹ˆ๊น builder ํŒจํ„ด์œผ๋กœ dto ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

๊ทผ๋ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋ ์ˆ˜๋ก dto ์ˆ˜๊ฐ€ ๋Œ€๋žต 30๊ฐœ ์ •๋„๋กœ ๋Š˜์–ด๋‚ฌ๋‹ค...

์ด๊ฒŒ ๋งž์•„...?ใ…Ž

 

 

๐Ÿซ  ๊ณ„์†๋˜๋Š” ๊ณ ๋ฏผ..

 

ํ˜„์žฌ ๋ฌธ์ œ์ 

Builder ํŒจํ„ด์œผ๋กœ ์ƒ์„ฑํ•ด์„œ ๋„ˆ๋ฌด ๋งŽ์€ dto ํด๋ž˜์Šค๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

์ค„์ผ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‚˜??

 

๊ณ ๋ฏผํ•œ ๋ฐฉ๋ฒ•

  1. SuperBuilder ์‚ฌ์šฉ
    • @SuperBuilder ๋ž€?
      • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•„๋“œ๋„ ํฌํ•จํ•˜์—ฌ ๋นŒ๋”๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ฆ‰, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•„๋“œ ๋˜ํ•œ ๋นŒ๋”์— ํฌํ•จ๋˜์–ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ์ 
      • ์ƒ์†ํ• ๋•Œ ์—ฌ๋Ÿฌ ๋ถ€๋ชจ ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ• ์ˆ˜ ์—†๋‹ค.
      • ์–ด๋–ป๊ฒŒ๋“  ๊ฐ ๋ถ€๋ชจ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค -> ํ•„๋“œ์˜ ์ค‘๋ณต๋งŒ ํ•ด๊ฒฐํ•ด์ฃผ๋ฏ€๋กœ ํ˜„์žฌ dto ํด๋ž˜์Šค ์ˆ˜๋ฅผ ์ค„์ผ์ˆ˜์—†๋‹ค.
      • ์„œ๋น„์Šค๋‹จ์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค -> ์ฝ”๋“œ ์ž‘์„ฑ์ด ๋Š˜์–ด๋‚œ๋‹ค.
  2. Mapstruct ์‚ฌ์šฉ
    • Mapstruct ๋ž€?
      • ๊ฐ์ฒด ๊ฐ„์˜ ๋งคํ•‘์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
      • ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ๋งคํ•‘ ๋Œ€์ƒ ๊ฐ์ฒด์˜ ํ•„๋“œ์™€ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์–ด ๋ฐ˜๋ณต์ ์ด๊ณ  ์ผ์ƒ์ ์ธ ๋งคํ•‘ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ์ 
      • ๋งคํ•‘ํ• ๋ ค๋Š” ๊ฐ์ฒด์™€ ํ•„๋“œ๊ฐ’์ด ๊ฐ™์ง€์•Š์œผ๋ฉด ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค. -> ํ˜„์žฌ  ์—ฌ๋Ÿฌ dto๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๋ณต์žกํ•ด ๋ณด์ผ ๊ฐ€๋Šฅ์„ฑ ๋†’๋‹ค.

 

 

ํ˜„์žฌ ๋‚˜์˜ ์ƒํ™ฉ์—์„œ๋Š” ๋‘˜๋‹ค ํƒˆ๋ฝ...ใ…Ž

 

 

๐Ÿคฏ ๊ณ ๋ฏผ์€ ์ง„ํ–‰์ค‘...

 

๋˜‘๋˜‘ํ•œ ๊ฐœ๋ฐœ์ž๋ถ„์—๊ฒŒ ๋„์›€์„ ์ฒญํ–ˆ๋”๋‹ˆ ์‹ค๋ฌด์—์„œ๋Š” dto ํด๋ž˜์Šค๊ฐ€ ์—„์ฒญ ๋งŽ๋‹ค๊ณ  ํ•ด์„œ ๊ดœ์ฐฎ๋‹ค๊ณ  ํ•˜์…จ๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ์„  ์ง€๊ธˆ์€ ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

dto ์ˆ˜๋Š” ๊ณ„์† ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์ง€๋งŒ ์•„๋ฌด์ชผ๋ก ์ž˜ ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค.

ํ˜„์žฌ dto ๊ตฌ์กฐ

 

 

 

์•„์ง๋„ ๊ณ„์† ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด๊ณ  ์žˆ๋‹ค..

๋” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ถ”๊ฐ€๋กœ ์˜ฌ๋ฆฌ๊ฒ ๋‹ค.

 

(ํ˜น์‹œ๋ผ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์ถ”์ฒœํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌ๋“œ๋ฆฌ๊ฒŸ์Šด๋‹ˆ๋‹ค!!๐Ÿ˜Š)