Bean์ด๋ IoC ์ปจํ ์ด๋์์ ๊ด๋ฆฌ๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์์ ํต์ฌ์ ์ด๋ฃจ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. IoC ์ปจํ ์ด๋์์ ๊ด๋ฆฌ๋๋ค๋ ์ ์ ๋นผ๋ฉด ๊ทธ๋ฅ ์์ ์๋ฐ ๊ฐ์ฒด์ ๋ค๋ฆ ์๋ค. Bean์ ๋ํดํธ๋ก ์ฑ๊ธํค์ผ๋ก ์์ฑ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์์์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์์ฑ๋๊ฒ ๋ณด์ฅํ๋ ๋์์ธ ํจํด์ด๋ค.
์์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ํด๋ผ์ด์ธํธ๊ฐ memberService Bean์ ์์ฒญํ์๋ IoC(DI) ์ปจํ ์ด๋๊ฐ ๋์ผํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๋ฐํํด์ฃผ๋๊ฒ์ ๋ณผ ์ ์๋ค.
๐จ ์ฑ๊ธํค ํจํด์ ์ฃผ์์ ๐จ
- ํ๋์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ๊ณต์ ํ๋๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์งํ๊ฒ ์ค๊ณํ๋ฉด ์๋๋ค.
- ํน์ ํด๋ผ์ด์ธํธ์ ์์กด์ ์ด๊ฑฐ๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ํ๋๊ฐ ์์ผ๋ฉด ์๋๋ค.
- ๊ฐ๊ธ์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํด์ผ ํ๋ค.
- ํ๋ ๋์ ๊ณต์ ๋์ง ์์ ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, TreadLocal์ ์ฌ์ฉํ์.
์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก๋ @Component ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์ง์ ํด๋์ค์์ @Compoenent ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด๋ ๋๊ณ , stereotype์ธ @Service, @Controller, @Repository๋ฅผ ์ฌ์ฉํด์ Bean์ ๋ฑ๋กํ ์ ์๋ค. stereotype์ธ ์ด๋
ธํ
์ด์
๋ค๋ ๊น๋ณด๋ฉด @Component ์ด๋
ธํ
์ด์
์ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก๋ @Configuration ์ด๋ ธํ ์ด์ ๊ณผ @Bean ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. @Configuration ์ด๋ ธํ ์ด์ ์ ํด๋น ํด๋์ค์ Bean์ด ์์ผ๋ scanํด๋ผ! ๋ผ๋ ์ด๋ ธํ ์ด์ ์ด๋ค. @Bean ์ด๋ ธํ ์ด์ ์ ํด๋น ๋ฉ์๋๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ๋๊ฒ์ด๋ค. @Bean์ ์ฌ์ฉํด ๋ฑ๋ก ํ ๊ฒฝ์ฐ ๋ฉ์๋์ ์ด๋ฆ์ผ๋ก Bean ์ด๋ฆ์ด ๋๋ค.
~Application์ ์๋ @ComponenteScan ์ด๋
ธํ
์ด์
๋๋ถ์ ~Application ํ์ ํจํค์ง์ ์๋ Bean๋ค์ ์ค์บํด IoC ์ปจํ
์ด๋์ Bean์ ๋ฑ๋กํ ์ ์๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ~Application์ด ์ํด์๋ ํจํค์ง ๋ณด๋ค Bean ์ค์บ ๋์์ด ์์ ํจํค์ง์ ์๋ค๋ฉด ComponentScan์ด ๋์ง ์๋๋ค!