๐ŸŒฑ → ๐ŸŒณ

[Spring] IoC, DI๋ž€? ๋ณธ๋ฌธ

Server/Java & Spring

[Spring] IoC, DI๋ž€?

BAY 2023. 3. 22. 10:21
728x90

IoC(Inversion of Control)๋ž€?

IoC๋Š” Inversion of Control์˜ ์ค„์ž„ ๋ง๋กœ, ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๋Š” ๋œป์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ํ”„๋ ˆ์ž„์›ค์ด ์ง์ ‘ ์ œ์–ด๋ฅผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์˜์กด ๊ด€๊ณ„ ๊ฒฐ์ •(Component dependency resolution), ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ(life cycle)์™€ ๊ฐ™์€ ์ผ์„ ๋Œ€์‹  ์ˆ˜ํ–‰ํ•ด์ค€๋‹ค.

ํ”ํžˆ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›ค์„ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•  ๋•Œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ Bean์„ ์‚ฌ์šฉ ํ•  ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ์š”์ฒญ์— ์•Œ๋งž์€ Bean์„ ์ƒ์„ฑํ•ด์„œ ํ•„์š”ํ•œ ์ผ์„ ํ•˜๋„๋ก ์‹œํ‚จ๋‹ค. ํ•ด๋‹น Bean์ด ํ•  ์ผ์„ ๋งˆ์น˜๋ฉด Bean์„ ์‚ญ์ œํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ์ œ์–ด ํ•  ํ•„์š”๊ฐ€ ์—†์ด ํ”„๋ ˆ์ž„์›ค์ด ์ง์ ‘ ์ œ์–ดํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๊ฒƒ์ด IoC ์ œ์–ด์˜ ์—ญ์ „์ด๋‹ค.

์ปจํ…Œ์ด๋„ˆ๋ž€?

์ปจํ…Œ์ด๋„ˆ ํ˜น์€ IoC์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ์ฝ”๋“œ์˜ ์ฒ˜๋ฆฌ ๊ณผ์ •์„ ์œ„์ž„ ๋ฐ›์€ ๋…๋ฆฝ์ ์ธ ์กด์žฌ์ด๋‹ค.

์ ์ ˆํ•œ ์„ค์ •์„ ํ•ด์ฃผ๋ฉด, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์Šค์Šค๋กœ ์ฐธ์กฐํ•œ ๋’ค ์•Œ์•„์„œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ(๊ฐ์ฒด์˜ ์ƒ์•  ์ฃผ๊ธฐ)์„ ๊ด€๋ฆฌํ•œ๋‹ค.

DI(Dependency Injection)๋ž€?

DI๋Š” Dependency Injection์˜ ์ค„์ž„ ๋ง๋กœ, ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๊ฐ ํด๋ž˜์Šค์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ Bean ์„ค์ • ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์ฃผ์ž… ํ•ด์ค€๋‹ค.

DI๋Š” IoC ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜ ์ด๋‹ค.

IoC๊ฐ€ ๋ฒ”์šฉ์ ์ธ ์˜๋ฏธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ํŠน์ง•์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” IoC๋ฐฉ์‹์˜ ํ•ต์‹ฌ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. (DI๊ฐ€ ์Šคํ”„๋ง์—์„œ ์‹œ์ž‘๋œ ๊ฐœ๋…์€ ์•„๋‹ˆ๋‹ค)

DI์˜ ํ•ต์‹ฌ์€ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋˜๋Š” ๋‹ค์ด๋‚˜๋ฏนํ•œ(๋™์ ์ธ) ์˜์กด ๊ด€๊ณ„ ์ด๋‹ค. ์Šคํ”„๋ง DI์˜ 3๊ฐ€์ง€ ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

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

ํด๋ž˜์Šค ๊ฐ„์— ์˜์กด ๊ด€๊ณ„๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์œ ์—ฐํ•œ ์ฝ”๋“œ๋กœ ์ธํ•ด ๊ฐœ๋ฐœ์— ์–ด๋ ค์›€์ด ์ ๋‹ค.

728x90