๐Ÿ› ๏ธBackend/๐ŸŒณSpring

[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ & Bean ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ

junbin2 2024. 10. 21. 06:55

 

 

1. IoC Container ( ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ )

์•ž์„œ ์‚ดํŽด๋ณธ IoC๋Š” "์ œ์–ด์˜ ์—ญ์ „", IoC Container์—๊ฒŒ ์ œ์–ด์˜ ๊ถŒํ•œ์„ ๋„˜๊ธด๋‹ค๊ณ  ์„ค๋ช…์„ ํ–ˆ์—ˆ๋‹ค. IoC Container๋Š” ๊ฐ์ฒด๋ฅผ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์‹œ์ผœ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด๋“ค์„ ๋ชจ๋‘ ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์–ด์„œ ๋ณด๊ด€์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‚ด๋ถ€์˜ ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ณผ์ •์œผ๋กœ๋Š” ๋จผ์ € ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์ธ์Šคํ„ด์Šคํ™” ๋˜๊ณ , ์ธ์Šคํ„ด์Šคํ™” ๋œ ๊ฐ์ฒด๋“ค์€ ์˜์กด์„ฑ ์ฃผ์ž…์ด ์ž๋™์œผ๋กœ ๋ฉ๋‹ˆ๋‹ค.
์ด๋ ‡๋“ฏ, IoC Container๋Š” Bean(๊ฐ์ฒด) ๋“ค์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ž๋™์œผ๋กœ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 * IoC Container๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์€ ๋ชจ๋‘ Bean์ด๋‹ค.

 

- IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ์ž๋ฐ”์˜ ๊ฐ์ฒด๋กœ์จ ์กด์žฌํ•œ๋‹ค.

- ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๋กœ๋Š” BeanFactory ์™€ ์ด๋ฅผ ํ™•์žฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ธ ApplicationContext ๊ฐ€ ์žˆ๋‹ค.

- ApplicationContext๋Š” Bean ๊ด€๋ฆฌ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณต ํ•˜๊ณ , ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋จ

* ApplicationContext ๋ฐ IoC ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด๋ฃจ๋Š” ๊ตฌํ˜„์ฒด๋“ค์˜ ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ ์žฅ์— ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.


 

2. Bean

IoC Container์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด ์ด๋‹ค. ํ•ด๋‹น Bean์€ ํ•„์š”์— ๋”ฐ๋ผ ์ธ์Šคํ„ด์Šคํ™” ๋˜์–ด ๊ฐ์ฒด๋กœ์จ ์‚ฌ์šฉ์ด ๋œ๋‹ค. ๋˜ํ•œ, ์ธ์Šคํ„ด์Šคํ™” ๋œ Bean ๊ฐ์ฒด๋Š” IoC Container์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์˜์กด์„ฑ ์ฃผ์ž…์ด ๋œ๋‹ค.
์ด๋Ÿฌํ•œ Bean๋“ค์€ XML ๊ตฌ์„ฑํŒŒ์ผ ๋ฐ ์• ๋„ˆํ…Œ์ด์…˜ ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์„ค์ •์ด ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด IoC Container๋Š” ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๊ณ , ์–ด๋–ค ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์•ผ ํ• ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

3. IoC ์ปจํ…Œ์ด๋„ˆ Bean ๋“ฑ๋ก

- IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋  ๊ฐ์ฒด๋“ค์„ Bean์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ Bean ๋“ฑ๋ก์ด๋ผ๊ณ  ํ•œ๋‹ค.

- IoC ์ปจํ…Œ์ด๋„ˆ๋Š” Bean์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Bean์œผ๋กœ ๋งŒ๋“ค์–ด์งˆ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

- IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์—ฌ, ๊ฐ์ฒด๋ฅผ Bean์œผ๋กœ ๋“ฑ๋ก์„ ํ•œ๋‹ค. IoC ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๊ณผ์ •์ด๋‹ค.

- ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํฌ๊ฒŒ ์• ๋„ˆํ…Œ์ด์…˜ ๋ฐฉ์‹๊ณผ XML ๋ฐฉ์‹์ด ์กด์žฌํ•˜๋ฉฐ ๊ทธ ๋ฐ–์—๋„ ๋” ์กด์žฌํ•œ๋‹ค.

IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ Bean ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ž์„ธํ•œ ๋ฐฉ์‹์€ ๋‹ค์Œ์žฅ ์—์„œ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.
 

 

์ฐธ์กฐ ( Spring ๊ณต์‹ ๋ฌธ์„œ )

https://docs.spring.io/spring-framework/reference/core/beans/introduction.html

 

Introduction to the Spring IoC Container and Beans :: Spring Framework

This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) principle. Dependency injection (DI) is a specialized form of IoC, whereby objects define their dependencies (that is, the other objects they work with) only through

docs.spring.io