๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Spring] IoC ๋ณธ๋ฌธ

โญ IoC (Inversion of Control)

  • ์ œ์–ด์˜ ์—ญ์ „
  • ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” Object(Bean) ์˜ ์ƒ์„ฑ๊ณผ ์˜์กด ๊ด€๊ณ„ ์„ค์ •, ์‚ฌ์šฉ, ์ œ๊ฑฐ ๋“ฑ์˜ ์ž‘์—…์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹นํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ Object์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด์„œ IOC๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ IOC ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

์ฆ‰, ์ œ์–ด์˜ ํ๋ฆ„์„ ๋ฐ”๊พผ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€๊ฐœ๋ฐœ์ž๊ฐ€ class๋ฅผ ์ƒ์„ฑํ•˜๋ฉด new๋ฅผ ํ†ตํ•ด์„œ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œํ›„ ์‚ฌ์šฉํ•˜์˜€์ง€๋งŒ ์‚ฌ์šฉ์ž์˜ ์ œ์–ด์—์„œ ๋ฒ—์–ด๋‚˜ Spring์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋˜๋ฉฐ ์ด๋•Œ ์ƒ์„ฑ๋œ ์ž๋ฐ” ๊ฐ์ฒด๋Š” Bean์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

 

๊ธฐ์กด๋ฐฉ๋ฒ• Spring
1. ๊ฐ์ฒด ์ƒ์„ฑ
2. ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์˜์กด์„ฑ ๊ฐ์ฒด ์ƒ์„ฑ(new)
3. ์˜์กด์„ฑ ๊ฐ์ฒด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
1. ๊ฐ์ฒด ์ƒ์„ฑ
2. ์˜์กด์„ฑ ๊ฐ์ฒด ์ฃผ์ž…
(์ง์ ‘ ์ƒ์„ฑํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์Šคํ”„๋ง์ด ๋งŒ๋“ค์–ด ๋†“์€ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…)
3. ์˜์กด์„ฑ ๊ฐ์ฒด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

 

์Šคํ”„๋ง์ด ๋ชจ๋“  ์˜์กด์„ฑ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์ด ์‹คํ–‰๋ ๋•Œ ๋‹ค ๋งŒ๋“ค์–ด์ฃผ๊ณ  ํ•„์š”ํ•œ๊ณณ์— ์ฃผ์ž…์‹œ์ผœ์คŒ์œผ๋กœ์จ Bean๋“ค์€ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์˜ ํŠน์ง•์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด ์ œ์–ด์˜ ํ๋ฆ„์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ปจํŠธ๋กค ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์Šคํ”„๋ง์ด ์•Œ์•„์„œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋Œ€์ฒด ์™œ? ๊ฐ์ฒด์˜ ์˜์กด์„ฑ์„ ์—ญ์ „์‹œํ‚ฌ๊นŒ์š”??๐Ÿค”

 

  1. ๊ฐ์ฒด๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์—ฌ ์œ ์—ฐํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ• ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.
  2.  ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•ด์ง‘๋‹ˆ๋‹ค.

 

โญ IoC ์ปจํ…Œ์ด๋„ˆ

  • ์Šคํ”„๋ง์—์„œ๋Š” Object(Bean)์˜ ์ƒ์„ฑ๊ณผ ์˜์กด ๊ด€๊ณ„ ์„ค์ •, ์‚ฌ์šฉ, ์ œ๊ฑฐ ๋“ฑ์˜ ์ž‘์—…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ๋Œ€์‹  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ์ฆ‰ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ Object์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด์„œ IoC ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง์—์„œ๋Š” IoC๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นˆํŒฉํ† ๋ฆฌ(BeanFactory ) , DI ์ปจํ…Œํ…Œ์ด๋„ˆ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(ApplicationContext) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— DI ๋ฅผ ์œ„ํ•œ ๋นˆ ํŒฉํ† ๋ฆฌ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ๊ฒƒ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ(ApplicationContext) ์ž…๋‹ˆ๋‹ค.

 

BeanFactory (๋นˆ ํŒฉํ† ๋ฆฌ)

  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค
  • ์Šคํ”„๋ง bean๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ๋Œ€ํ‘œ์ ์œผ๋กœ getBean() ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

ApplicationContext

  • Bean Factory ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ƒ์†๋ฐ›์•„์„œ ์ œ๊ณตํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ
    • ํ™˜๊ฒฝ๋ณ€์ˆ˜
      • ๋กœ์ปฌ, ๊ฐœ๋ฐœ, ์šด์˜ ๋“ฑ์„ ๊ตฌ๋ถ„ํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฒคํŠธ
      • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋ธ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ง€์›ํ•œ๋‹ค.
    • ํŽธ๋ฆฌํ•œ ๋ฆฌ์†Œ์Šค ์กฐํšŒ
      • ํŒŒ์ผ, Classpath ๋“ฑ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

 

BeanFactory์™€ ApplicationContext ๊ด€๊ณ„

 

 

 

 

 

์ฐธ์กฐ

https://steady-coding.tistory.com/600