JiwonDev

IoC, DI, ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ

by JiwonDev

์Šคํ”„๋ง์„ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด IoC, DI, ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์€ ๋‹จ์–ด๋ฅผ ๋งŽ์ด ๋ณด๊ฒŒ๋œ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด์ „ ๊ธ€์—์„œ ๋ฐฐ์šด ๊ฐœ๋…์„ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

# IoC (Inversion of Control), ์ œ์–ด์˜ ์—ญ์ „

  • ๊ธฐ์กด์—๋Š” ๊ตฌํ˜„์ฒด๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์„ ์ง์ ‘ ์ƒ์„ฑํ•ด์„œ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์—ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์€ ๊ฐ๋…์ด ์•„๋‹Œ ๊ณต์—ฐ๋ฐฐ์šฐ๊ฐ€ ์ƒ๋Œ€ ๋ฐฐ์šฐ๋ฅผ ์บ์ŠคํŒ…ํ•˜๊ณ , ์†Œํ’ˆ์„ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ˜ผ์ž์„œ ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ์ง€๊ณ ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•ด AppConfig๋ผ๋Š” ๊ตฌ์„ฑ์˜์—ญ์„ ๋งŒ๋“ค์–ด ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๋ฅผ ์ƒ์„ฑ, ์ฃผ์ž…ํ•˜๋Š” ์—ญํ• ์„ ๋ถ„๋ฆฌ์‹œ์ผฐ๋‹ค. ์ด์ œ ์‹คํ–‰์˜์—ญ์— ์žˆ๋Š” ๊ฐ๊ฐ์˜ ๊ตฌํ˜„์ฒด๋“ค์€ ์ด์ œ ๋” ์ด์ƒ ์ž์‹ ์ด ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๋„ ์—†๊ณ , ๊ตฌํ˜„์ฒด๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๋„ ์—†๋‹ค. 
  • ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์ œ์–ด ํ๋ฆ„์— ๋Œ€ํ•œ ๊ถŒํ•œ์€ AppConfig๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์„œ๋น„์Šค ์‹คํ–‰์˜์—ญ์€ ๋ฌต๋ฌตํžˆ ์ž์‹ ์˜ ๋กœ์ง์„ ์‹คํ–‰ํ•  ๋ฟ, ์ „์ฒด ์ œ์–ด ํ๋ฆ„์— ๋Œ€ํ•ด์„œ๋Š” ์ „ํ˜€ ๋ชจ๋ฅธ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„์„ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์ œ์–ด์˜ ์—ญ์ „(IoC) ๋ผ๊ณ  ํ•œ๋‹ค.

 


# ํ”„๋ ˆ์ž„์›Œํฌ vs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋ณดํ†ต ํ”„๋ ˆ์ž„์›Œํฌ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•  ๋•Œ IoC ๋ผ๋Š” ๋ง์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ œ์–ดํ•˜๊ณ , ๋Œ€์‹  ์‹คํ–‰ํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋งž๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ์ „์ฒด ํ๋ฆ„์„ ๋‚ด๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, ๊ทธ๊ฑด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ธ ๊ฒƒ์ด๋‹ค. (์ฆ‰ ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Junit๋„ ์ผ์ข…์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.)

 


#DI(Dependency Injection), ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…

์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋ ค๋ฉด ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด ๊ด€๊ณ„์™€, ์‹คํ–‰ ์‹œ์ ์— ๊ฒฐ์ •๋˜๋Š” ๋™์ ์ธ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ์˜์กด ๊ด€๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

 

@ ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„

ํด๋ž˜์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด๊ด€๊ณ„๋Š” import ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ ์‰ฝ๊ฒŒ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๊ตณ์ด ์•ฑ์„ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š์•„๋„ ๋ถ„์„๊ฐ€๋Šฅํ•˜๋‹ค. ์•„๋ž˜์˜ ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ†ตํ•ด OrderServiceImpl์€ MemberRepository์™€ DiscountPolicy์— ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์‹คํ–‰์— ์–ด๋–ค ๊ตฌํ˜„์ฒด๊ฐ€ ์ฃผ์ž…๋˜๊ณ  ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค.

 

@ ๋™์ ์ธ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ์˜์กด๊ด€๊ณ„

์•ฑ ์‹คํ–‰ ์‹œ์ ์— ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ๊ฐ’์ด ์—ฐ๊ฒฐ๋œ ์˜์กด๊ด€๊ณ„์ด๋‹ค.

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

 


# IoC ์ปจํ…Œ์ด๋„ˆ, DI ์ปจํ…Œ์ด๋„ˆ

AppConfig ์ฒ˜๋Ÿผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์„ [ IoC ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” DI ์ปจํ…Œ์ด๋„ˆ ]๋ผ ํ•œ๋‹ค. ์ด ๋‘˜์€ ๊ฐ™์€ ๋ง์ด์ง€๋งŒ, IoC๋Š” ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด์ด๊ธฐ์— '์˜์กด๊ด€๊ณ„ ์ฃผ์ž…'์— ์ดˆ์ ์„ ๋งž์ถฐ DI ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฅด๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์กฐ๋ฆฝ์„ ๋‹ด๋‹นํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ์˜๋ฏธ๋กœ ์–ด์…ˆ๋ธ”๋Ÿฌ, ์˜ค๋ธŒ์ ํŠธ ํŒฉํ† ๋ฆฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

 


# ์ด์ œ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋กœ๋กœ

์•ž์—์„œ๋Š” ํ†ฐ์บฃ ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๋„์šฐ๊ธฐ ์œ„ํ•ด์„œ ์Šคํ”„๋ง๋ถ€ํŠธ๋ฅผ ์ด์šฉํ–ˆ์„ ๋ฟ, ์ „๋ถ€ ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ”์ฝ”๋“œ๋กœ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ์ž‘์„ฑํ•˜์˜€๋‹ค. (์Šคํ”„๋ง์˜ ๊ธฐ๋Šฅ์„ ์“ด ๊ฒƒ์ด ์—†๋‹ค.) ์ด์ œ ๋‹ค์Œ ๊ธ€์—์„œ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์•ž์˜ ๊ฐœ๋…๋“ค์„ ์–ด๋–ป๊ฒŒ ์ง€์›ํ•˜๋Š”์ง€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ์•Œ์•„๋ณด์ž. 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ