EEALL@ONCE

๐ŸŒฑIoC,DI,์ปจํ…Œ์ด๋„ˆ ๋ณธ๋ฌธ

Spring๐ŸŒฑ

๐ŸŒฑIoC,DI,์ปจํ…Œ์ด๋„ˆ

์˜ฌ์—ฃ์›์Šค 2023. 7. 23. 14:19
728x90

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

๊ตฌํ˜„ ๊ฐ์ฒด(์ž‘๊ฐ€ ์—ญํ• )์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„ ( ๋ฐฐ์šฐ ์บ์ŠคํŒ… ์ด๋ผ๊ณ  ํ•˜๋˜๊ฑธ ) ์Šค์Šค๋กœ ํ–ˆ๋‹ค๋ฉด, AppConfig ์ดํ›„์—๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด๋Š” ์ž๊ธฐ ๋กœ์ง๋งŒ ์‹คํ–‰ํ•˜๋Š” ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ณ (๊ธ€์˜ ์ „๊ฐœ๋งŒ ์‹ ๊ฒฝ์“ฐ๊ณ ) ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด์˜ ํ๋ฆ„์€ AppConfig ๊ฐ€ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ฆ‰ ๋ˆ„๊ฐ€ ๋‚ด ๊ธ€์— ์ผ€์ŠคํŒ…๋ ์ง€๋Š” ๋ชจ๋ฅธ์ฒด, ๊ทธ๋ƒฅ ์„œ์‚ฌ๋งŒ ์ž˜ ์Œ“์•„์˜ฌ๋ฆฌ๋ฉด ๋˜๋Š”๊ฒŒ ์ œ์–ด์˜ ์—ญ์ „(IoC)์ด๋‹ค. ( ๊ตฌํ˜„ ๊ฐ์ฒด๊ฐ€ ๋ˆ„๊ฐ€ ์บ์ŠคํŒ… ๋  ์ง€ ๋ชฐ๋ผ์„œ ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค!) 

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

- ํ”„๋ ˆ์ž„์›Œํฌ๋ฉด ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ œ์–ดํ•˜๊ณ , ๋Œ€์‹  ์‹คํ–‰ ( JUnit)

- ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์ง์ ‘ ์ œ์–ด์˜ ํ๋ฆ„์„ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

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

์˜์กด๊ด€๊ณ„์—๋Š” ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด ๊ด€๊ณ„์™€ ๋™์ ์ธ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค.

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

์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ import์ฝ”๋“œ๋กœ ๋ณด์ด๋Š” ์˜์กด ๊ด€๊ณ„์ด๋‹ค. 
๋”ฐ๋ผ์„œ ์‰ฝ๊ฒŒ ๋ถ„์„๊ฐ€๋Šฅํ•˜๋‹ค. 

๋™์ ์ธ ๊ฐ์ฒด ์˜์กด ๊ด€๊ณ„๋Š” 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰ ์‹œ์ ์— ์‹ค์ œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์˜์กด ๊ด€๊ณ„์ด๋‹ค. ์ฆ‰ AppConfig์—์„œ ์„ค์ •๋œ ์˜์กด ๊ด€๊ณ„์ด๋‹ค. 

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

์‚ฌ์‹ค ์•ž์— ์ ์—ˆ๋˜ ์ด์•ผ๊ธฐ์˜ ๋ฐ˜๋ณต์ ์ธ ์ด์•ผ๊ธฐ๋‹ค. ๊ฒฐ๊ตญ์€ ์บ์ŠคํŒ…์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ๊ธ€๋งŒ ์จ๋ผ๋Š” ๊ฑฐ๋‹ค! 

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

App Config์ฒ˜๋Ÿผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒƒ์„ IoC ์ปจํ…Œ์ด๋„ˆ, DI ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ํ•œ๋‹ค. 

๋•Œ๋กœ๋Š” assembler, object factory ๋ผ๊ณ  ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. 

 

728x90