Back-end/Spring

[Spring] ์˜์กด์„ฑ ์ฃผ์ž… - DI

๐Ÿ’ก ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ž€? 

 

IoC๋ผ๋Š” ์šฉ์–ด๋Š” ๋งค์šฐ ๋Š์Šจํ•˜๊ฒŒ ์ •์˜๋ผ์„œ ํญ ๋„“๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡๋ช‡ ์‚ฌ๋žŒ์˜ ์ œ์•ˆ์œผ๋กœ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” IoC๋ฐฉ์‹์˜ ํ•ต์‹ฌ์„ ์งš์–ด์ฃผ๋Š” ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚˜๋Š” ์ด๋ฆ„์„ ๋งŒ๋“œ๋Š”๋ฐ,

์ด๋ฅผ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(Dependency Injection)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์Šคํ”„๋ง IoC ๊ธฐ๋Šฅ์˜ ๋Œ€ํ‘œ์ ์ธ ๋™์ž‘์›๋ฆฌ๋Š” ์ฃผ๋กœ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ IoC์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง€๊ธˆ์€ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ์ปจํ…Œ์ด๋„ˆ, DI ์ปจํ…Œ์ด๋„ˆ๋ผ ๋” ๋งŽ์ด ๋ถˆ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ๏ธ ์˜์กด๊ด€๊ณ„๋ž€?

 

๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ์—๊ฒŒ ์˜์กดํ•˜๋Š” ๊ด€๊ณ„์— ์žˆ๋‹ค.

 

UML๋ชจ๋ธ์—์„œ๋Š” ๋‘ ํด๋ž˜์Šค์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•œ๋‹ค.

 

 

์˜์กดํ•œ๋‹ค๋Š” ๊ฑด ์˜์กด๋Œ€์ƒ, B๊ฐ€ A์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ๋œป์ธ๋ฐ,

B์˜ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ ์˜ํ–ฅ์ด A๋กœ ์ „๋‹ฌ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๋‹ค์‹œ ๋งํ•ด, ์˜์กด๊ด€๊ณ„์—๋Š” ๋ฐฉํ–ฅ์„ฑ์ด ์กด์žฌํ•œ๋‹ค.

๋ฐฉํ–ฅ์„ฑ ์กด์žฌ๋ž€, A๊ฐ€ B์— ์˜์กดํ•˜๊ณ  ์žˆ์ง€๋งŒ, B๋Š” A์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด์ „์— ๋‹ค๋ค˜๋˜ UserDao ์˜์กด๊ด€๊ณ„๋ฅผ ๋ณด๋ฉด,

UserDao๊ฐ€ ConnectionMaker์— ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ํ˜•ํƒœ์ด๋‹ค.

๋”ฐ๋ผ์„œ ConnectionMaker ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ณ€ํ•˜๋ฉด, ๊ทธ ์˜ํ–ฅ์„ UserDao๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ๋ฐ›๋Š”๋‹ค.

 

ํ•˜์ง€๋งŒ DConnectionMaker ์ด ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ฐ”๋€Œ์–ด๋„ UserDao์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

์™œ๋ƒํ•˜๋ฉด DConnectionMaker๋Š” ๋‹จ์ง€ ConnectionMaker๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ์˜์กด๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค์–ด๋‘๋ฉด ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ํด๋ž˜์Šค์™€์˜ ๊ด€๊ณ„์— ์˜ํ–ฅ์„ ๋œ ๋ฐ›๋Š”๋‹ค.

 

์ด๊ฒƒ์„ UserDao์— ConnectionMaker๋ฅผ DconnectionMaker๋กœ ์˜์กด์„ฑ ์ฃผ์ž…ํ–ˆ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด์ฒ˜๋Ÿผ ์˜์กด๊ด€๊ณ„๋ž€ ์„ค๊ณ„ ๋ชจ๋ธ์˜ ๊ด€์ ์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, 

์ด๋Ÿฐ ์˜์กด๊ด€๊ณ„ ๋ง๊ณ , ๋Ÿฐํƒ€์ž„ ์‹œ์— ์˜ค๋ธŒ์ ํŠธ ์‚ฌ์ด์—์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๋Ÿฐํƒ€์ž„ ์˜์กด๊ด€๊ณ„๋„ ์žˆ๋‹ค.

 

โœ๏ธ ๋Ÿฐํƒ€์ž„ ์˜์กด๊ด€๊ณ„๋ž€?

 

์˜ค๋ธŒ์ ํŠธ ์˜์กด๊ด€๊ณ„๋ผ ๋ถˆ๋ฆฌ๋ฉฐ, ์„ค๊ณ„ ์‹œ์ ์˜ ์˜์กด๊ด€๊ณ„๊ฐ€ ์‹ค์ฒดํ™”๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, UserDao์˜ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋Ÿฐํƒ€์ž„ ์‹œ์— ์‚ฌ์šฉํ•  ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

์‚ฌ์ „์— ์–ด๋–ค ํด๋ž˜์Šค์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์“ธ์ง€ ๋ฏธ๋ฆฌ ์ •ํ•ด๋†“์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฝ”๋“œ ์†์— ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š”๋‹ค.

 

์ด๋•Œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜๊ณ  UserDao ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ํ›„ ๋Ÿฐํƒ€์ž„ ์‹œ์— ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๋Œ€์ƒ์„

์˜์กด ์˜ค๋ธŒ์ ํŠธ๋ผ ๋งํ•˜๋Š”๋ฐ,

 

์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์€ ์ด๋ ‡๊ฒŒ ๊ตฌ์ฒด์ ์ธ ์˜์กด ์˜ค๋ธŒ์ ํŠธ์™€ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ฃผ์ฒด,

๋ณดํ†ต ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋Ÿฐํƒ€์ž„ ์‹œ์— ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

 

โœ๏ธ ์˜์กด๊ด€๊ณ„ ์กฐ๊ฑด

 

  • ํด๋ž˜์Šค ๋ชจ๋ธ์ด๋‚˜ ์ฝ”๋“œ์—๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ์ ์˜ ์˜์กด๊ด€๊ณ„๊ฐ€ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์‹œ์ ์˜ ์˜์กด๊ด€๊ณ„๋Š” ์ปจํ…Œ์ด๋„ˆ๋‚˜ ํŒฉํ† ๋ฆฌ ๊ฐ™์€ ์ œ3์˜ ์กด์žฌ๊ฐ€ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์˜์กด๊ด€๊ณ„๋Š” ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์™ธ๋ถ€์—์„œ ์ œ๊ณตํ•ด์ค˜์•ผ ํ•œ๋‹ค.

์ œ3์˜ ์กด์žฌ : IoC ์ปจํ…Œ์ด๋„ˆ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ, ๋นˆ ํŒฉํ† ๋ฆฌ

 

โœ๏ธ ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰(DL) ์ด๋ž€? 

 

์Šคํ”„๋ง์—๋Š” ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… ๋ฟ ์•„๋‹ˆ๋ผ ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰๋„ ์žˆ๋‹ค.

 

์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๋ฐฉ๋ฒ•์ด ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ์˜ ์ฃผ์ž…์ด ์•„๋‹Œ, ์Šค์Šค๋กœ ๊ฒ€์ƒ‰์„ ์ด์šฉํ•œ๋‹ค.

๋˜ํ•œ ํ•„์š”๋กœ ํ•˜๋Š” ์˜์กด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ์ฐพ๋Š”๋‹ค.

 

์ฆ‰, ๋Ÿฐํƒ€์ž„ ์‹œ ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ์˜ค๋ธŒ์ ํŠธ์˜ ์ƒ์„ฑ ์ž‘์—…์€ ์™ธ๋ถ€ ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ IoC๋กœ ๋งก๊ธฐ์ง€๋งŒ,

์ด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ๋ฉ”์†Œ๋“œ๋‚˜ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ์ฃผ์ž… ๋Œ€์‹  ์Šค์Šค๋กœ ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

 

โœ๏ธ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(DI) VS ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰(DL)

 

์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ํ›จ์”ฌ ๋‹จ์ˆœํ•˜๊ณ  ๊น”๋”ํ•˜๋‹ค.

 

์™œ๋ƒํ•˜๋ฉด, DL์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฝ”๋“œ ์•ˆ์— ์˜ค๋ธŒ์ ํŠธ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋‚˜ ์Šคํ”„๋ง API๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š”๋ฐ,

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์ด ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์— ์˜์กดํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์ง ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰์€

main() ๋ฉ”์†Œ๋“œ์™€ ์„œ๋ธ”๋ฆฟ์˜ ์‚ฌ์šฉ์ž ์š”์ฒญ ์‹œ main() ๋ฉ”์†Œ๋“œ์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๊ณณ์— ์‚ฌ์šฉํ•ด์•ผ ์ ์ ˆํ•˜๋‹ค.

 

๐Ÿงพ ์ •๋ฆฌ

  • DI๋ฅผ ์œ„ํ•ด ์˜์กด๊ด€๊ณ„์— ๋Œ€ํ•ด ๋ช…ํ™•ํžˆ ์•Œ์•„์•ผ ํ•œ๋‹ค.
  • DI๋Š” IoC์˜ ๊ฐœ๋…์„ ๋” ๋ช…ํ™•ํžˆ ํ•œ ์šฉ์–ด์ด๋‹ค.
  • DI์™€ DL ์ค‘ DI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋‹จ์ˆœํ•˜๊ณ  ๊น”๋”ํ•˜๋‹ค.

์ฐธ๊ณ  ๋ฌธ์„œ : 

ํ† ๋น„์˜ ์Šคํ”„๋ง3 (์ด์ผ๋ฏผ)

 

๋ฐ˜์‘ํ˜•