DI์™€ IoC

class B {}
class A {
    B obj = new B();
}

class A์—์„œ class B๋ฅผ new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ด๋ฅผ "A๋Š” B์— ์˜์กด์ ์ด๋‹ค" ๋ผ๊ณ  ์–˜๊ธฐํ•œ๋‹ค.

IoC (Inversion of Control)

๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์˜์กด์„ฑ์„ ์ œ์–ดํ•˜๋˜ ๊ฒƒ์„ ์–ด๋–ค ๋งค๊ฐœ์ฒด์—๊ฒŒ ์œ„์ž„๊ถŒ์„ ๋นผ์•—๊ธฐ๊ฒŒ ๋˜์–ด ์ œ์–ด์˜ ์ฃผ์ฒด๊ฐ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— โ€œ์ œ์–ด์˜ ์—ญ์ „โ€์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งค๊ฐœ์ฒด๋ฅผ โ€œIoC ์ปจํ…Œ์ด๋„ˆโ€ ๋ผ๊ณ  ํ•œ๋‹ค.

IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ์ œ์–ด๊ถŒ ๊ฐ€์ง€๊ณ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ํ›„ ์ฃผ์ž…ํ•ด ์ฃผ๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๊นŒ์ง€ ๋‹ด๋‹นํ•œ๋‹ค.

์ด๋Ÿฌํ•œ IoC๋Š” ์ฃผ๋กœ Spring๊ณผ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

Spring IoC Container์™€ Spring Bean

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ-์ฃผ์ž…-ํ•ด์ œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด IoC ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์›๋ž˜ ์ปจํŠธ๋กค๋Ÿฌ์— new Service()๋ฅผ ์„ ์–ธํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์„œ๋น„์Šค๋ฅผ ์˜์กดํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ๋‹ค.

  1. ํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์„œ๋น„์Šค ๋นˆ์„ ๋“ฑ๋กํ•˜๊ฒŒ ๋˜๊ณ 

  2. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๋นˆ์„ ์ฃผ์ž…๋ฐ›๋Š”๋‹ค. (DI)

์ด์ œ๋Š” IoC ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ๋นˆ์„ ์ฃผ์ž…๋ฐ›๋Š” ์ƒํ™ฉ์ด๋‹ค. ์ด๊ฒƒ์„ ์ œ์–ด๊ฐ€ ๋’ค๋ฐ”๋€๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

Spring Bean์ด๋ž€?

์งง๊ฒŒ ์ •์˜ํ•˜๋ฉด IoC ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ƒ์„ฑ๋˜์–ด ๊ด€๋ฆฌ๋˜๋Š” Java ๊ฐ์ฒด์ด๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ new๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.

@Bean ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์œผ๋ฉด return ํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์Šคํ”„๋ง ๋นˆ์ด ๋˜๊ณ , ๋นˆ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ์ž๋™์œผ๋กœ ๋นˆ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

DI (Dependency Injection)

์˜์กด์„ฑ์€ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ(ํด๋ž˜์Šค, ํŒจํ‚ค์ง€ ๋“ฑ)์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿค” ๊ทธ๋Ÿผ ์˜์กด์„ฑ ์ฃผ์ž…์€?

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

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

โ“ ๊ทธ๋Ÿผ ๋ˆ„๊ฐ€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์ง€?

Controller๊ฐ€ Service๋ฅผ ์˜์กดํ•˜๊ณ  ์žˆ์„ ๋•Œ, Service๋ฅผ new๋กœ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ Service์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ฃผ์ž…ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

  • Spring Framework์˜ ์„ค์ • ์ •๋ณด๋“ค์„ ํ†ตํ•ด Spring IoC Container์— ๋นˆ์ด ๋“ฑ๋ก๋˜๋Š”๋ฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ์„ ์ฃผ์ž…๋ฐ›๋Š”๋‹ค.

Summary

์œ„์—์„œ๋„ ๋ฐ˜๋ณตํ•ด์„œ ์ ์—ˆ์ง€๋งŒ, DI๋Š” IoC ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” "๋งค๊ฒŒ์ฒด"๋ฅผ ๋‘๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ๋“ฑ๋กํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ฒ˜์—์„œ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•„์š”ํ•œ ๊ฒฝ์šฐ IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃผ์ž…ํ•ด ์ค€๋‹ค. ์ด๋กœ์จ ์ œ์–ด์˜ ์—ญ์ „์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ์žฅ์ ์„ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

  1. ์˜์กด์„ฑ ๊ฐ์†Œ (์œ ์ง€๋ณด์ˆ˜, ์žฌ์‚ฌ์šฉ, ๋ณ€๊ฒฝ์— ์šฉ์ด)

  • ํด๋ž˜์Šค๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง€๋ฉด ์ง์ ‘์ ์ธ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€๋ฐœ์ƒํ•˜์ง€ ์•Š์•„ ๊ฐ ํด๋ž˜์Šค๋“ค์˜ ๋ณ€๊ฒฝ์ด ์ž์œ ๋กœ์›Œ์ง„๋‹ค.

  1. ์ฝ”๋“œ์–‘ ๊ฐ์†Œ

  2. ํ…Œ์ŠคํŠธ ์šฉ์ด

Last updated