๐ค์คํ๋ง ์ปจํ ์ด๋์ด๋?
- ์ปจํ ์ด๋๋ ๋ณดํต ๊ฐ์ฒด(Bean)๋ค์ ์๋ช ์ฃผ๊ธฐ(Life Cycle)๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์๋ ์ธ์คํด์ค๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
- ApplicationContext๋ฅผ ์คํ๋ง ์ปจํ ์ด๋๋ผ๊ณ ๋ถ๋ฆฌ๊ธฐ๋ ํฉ๋๋ค.
- IoC์์น์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ด ํ๋ฆ์ด ๊ฐ๋ฐ์๊ฐ ์๋ ์ปจํ ์ด๋์ ์ํด ๊ฒฐ์ ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
๐คIoC ( Inversion Of Control)๋?
์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ํ๋ฉฐ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ๊ฐ๋ฐ์๊ฐ ์๋ ํ๋ ์์ํฌ๊ฐ ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์์๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ ์ดํด์ผ ํ์ง๋ง ์คํ๋ง์์๋ ์ปจํ ์ด๋์ Bean์ ๋ฑ๋กํ๊ธฐ๋ง ํ๋ฉด, ์คํ๋ง ์ปจํ ์ด๋์์ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ปจํธ๋กคํฉ๋๋ค.
์ฆ, ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ด ์คํ๋ง ์ปจํ ์ด๋๋ก ์ญ์ ๋๊ธฐ ๋๋ฌธ์ ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
๐ฉ์คํ๋ง ์ปจํ ์ด๋์ข ๋ฅ
์คํ๋ง ์ปจํ
์ด๋๋ IoC(Inversion of Control) ์์น์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ด ํ๋ฆ์ด ๊ฐ๋ฐ์๊ฐ ์๋ ์ปจํ
์ด๋์ ์ํด ๊ฒฐ์ ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ๊ฐ์ฒด ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ์ ์ง์คํ์ง ์๊ณ , ์ปจํ
์ด๋๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ด์ฉํด ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ ์ ์์ต๋๋ค.
์คํ๋ง ์ปจํ
์ด๋๋ ๋ ๊ฐ์ง ํ์
์ผ๋ก ๋ถ๋ฅ๋ฉ๋๋ค.
โป๏ธ BeanFactory : ์คํ๋ง ์ปจํ ์ด๋์ ์ต์์ ์ธํฐํ์ด์ค์ ๋๋ค. ๋น์ ๋ฑ๋ก, ์์ฑ, ์กฐํ ๋ฑ์ ๋น์ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ฉฐ, getBean() ๋ฉ์๋๋ฅผ ํตํด ์ธ์คํด์คํํ ์ ์์ต๋๋ค. ๋ํ์ ์ธ ๋น ํฉํ ๋ฆฌ์ ๊ตฌํ์ฒด๋ก๋ XMLํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋น์ ๊ด๋ฆฌํ๋ XmlBeanFactory๊ฐ ์์ต๋๋ค.
โป๏ธ AppliactionContext : ๋น ํฉํ ๋ฆฌ์ ํ์ฅํ์ด๋ฉฐ ๋นํฉํ ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค. ๋น์ ๋ฏธ๋ฆฌ ๋ก๋ํ๊ณ ์บ์ฑํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋น์ ๋ง๋ค๊ณ ๋ค๋ฃจ๋ ์ผ ์ธ์ ๋ค๊ตญ์ด ์ง์, ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ธ์ ๊ด๋ฆฌ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. XML, JavaConfig, Annotation ๋ฑ์ ๋ฐฉ์์ผ๋ก ์ค์ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค.
๋น(Bean)
์คํ๋ง ์ปจํ ์ด๋์์ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ฅผ ๋น(Bean)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๋น์ ์คํ๋ง ์ปจํ ์ด๋์์ ์์ฑ๋์ด ๊ด๋ฆฌ๋๋๋ฐ, ์ด๋ฅผ ๋น ์ปจํ ์ด๋(Bean Container)๋ผ๊ณ ๋ ํฉ๋๋ค. ๋น์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์ฑํ๋ฉฐ, ๋น์ ์ข ๋ฅ์ ์์ฑ ๋ฐฉ๋ฒ์ ์ค์ ํ์ผ์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค.
๐ฉ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ์ด์
๋์จํ ๊ฒฐํฉ๊ณผ, ๋์ ์บก์ํ๋ฅผ ์ํด ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋์ ์๋ฐ ์ฝ๋ ์์ฑ ์ ๊ฐ์ฒด๋ก์จ ์ฌ์ฉํ๊ธฐ ์ํด์๋ new์์ฑ์๊ฐ ๊ผญ ํ์ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์น์ ์๋ฐฐํ๊ฒ ๋์ด ์์กด์ฑ์ด ๋์์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ DIP์ ์๋ฐ๋๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ฆ, ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ํ๊ณ , ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ๋ฎ์ถ๊ธฐ ์ํด Spring ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
DIP(Dependency Inversion Principle)๋ฅผ ์๋ฐํ๋ค๋ ๊ฒ์ ์์กด์ฑ์ ๋ถํ์ํ๊ฒ ๋์ด๊ฑฐ๋, ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ์์กดํจ์ผ๋ก์จ ์ฝ๋์ ์ ์ฐ์ฑ์ ๊ฐ์์ํค๋ ํ์๋ฅผ ๋งํฉ๋๋ค.
โป๏ธ์คํ๋ง ์ปจํ ์ด๋์ ์์ฑ ๊ณผ์
โป ์คํ๋ง ๊ธฐ๋ณธ ์ค์ ์ ๋ด๋ถ์์ ์์ฑํ๋ ๋น ์ค๋ธ์ ํธ๋ฅผ ๋ชจ๋ ์ฑ๊ธํค์ผ๋ก ๋ง๋ญ๋๋ค.
์ฑ๊ธํค์ด๋? ๋งค๋ฒ ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ด ์ฌ ๋๋ง๋ค ๊ฐ ๋ก์ง์ ๋ด๋นํ๋ ์ค๋ธ์ ํธ๋ฅผ ์๋ก ๋ง๋ ๋ค๊ณ ๊ฐ์ .
์์ฒญ ํ ๋ฒ์ 5๊ฐ์ ์ค๋ธ์ ํธ๋ฅผ ์๋ก ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์ ๋ ์ด๋น 500๊ฐ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด 2500๊ฐ์ ์๋ก์ด ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋จ. ๋์ ๋๋ฉด ์๋ฒ๊ฐ ์์ ์๋ชจ๋ฅผ ๋ง์ด ํด์ผ ํ๋ฏ๋ก ๋นํจ์จ์ ์ธ ๋ฐฉ์.
๊ทธ๋์ ํ์ํ ๊ฒ์ด ์ฒ์ ํ๋ฒ ์์ฑํด ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ข ๋ฃ๋ ๋๊น์ง ์ถ๊ฐ์ ์ธ ์์ฑ ์์ ์ด ํ์ ์๋ ๊ฒ์ด ์ฑ๊ธํค ๋ฐฉ์์ด๋ฉฐ ์๋ฒํ๊ฒฝ์์ ๊ถ์ฅ๋๋ ๊ฒ
์๋ฐ์์์ ์ฑ๊ธํค์ ๋จ์
- ํ ์คํธํ๊ธฐ ์ด๋ ค์
- private ์์ฑ์๋ฅผ ๊ฐ๊ณ ์์ด ์์์ด ๋ถ๊ฐ๋ฅ
- ์๋ฒ ํ๊ฒฝ์์๋ ์ฑ๊ธํค์ด 1๊ฐ๋ง ์์ฑ๋จ์ ๋ณด์ฅํ์ง ๋ชปํจ
- ์ ์ญ ์ํ๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์งํฅ์ ์ด์ง ๋ชปํจ
์คํ๋ง ์ปจํ ์ด๋๋ ์ฑ๊ธํค ํจํด์ ์ ์ฉํ์ง ์์๋ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํด ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋จ์ ์ ํด๊ฒฐํ๊ณ ๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค์ผ๋ก ์ ์งํ ์ ์์ต๋๋ค.
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
1. ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ
- ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋๋ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. ( ์ฌ๊ธฐ์๋ AppConfig.class๋ก ์ง์ ํ์์ต๋๋ค)
- ์คํ๋ง ์ปจํ ์ด๋ ์์ ์คํ๋ง ๋น ์ ์ฅ์๊ฐ ์์ด ์ด ์์ ๋น ์ด๋ฆ๊ณผ ๋น ๊ฐ์ฒด๋ก ์ ์ฅํ์ฌ ๊ด๋ฆฌํฉ๋๋ค.
2. ์คํ๋ง ๋น ๋ฑ๋ก
- ์คํ๋ง ์ปจํ ์ด๋๋ ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ ์ค์ ํด๋์ค ์ ๋ณด๋ฅผ ์ฌ์ฉํด์ ์คํ๋ง ๋น์ ๋ฑ๋กํฉ๋๋ค.
- @Bean์ด ๋ถ์ ๋ฉ์๋๋ฅผ ํ๋์ฉ ํ์ธํฉ๋๋ค.
- ๋น ์ด๋ฆ์ ์ง์ ๋ถ์ฌํ ์๋ ์์ต๋๋ค. ( @Bean(name = "" )
3. ์คํ๋ง ๋น ์์กด๊ด๊ณ ์ค์
- ์ค๋น๋ ์คํ๋ง ๋น ๋ค์ ๋์ ๊ฐ์ฒด ์ธ์คํด์ค ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํฉ๋๋ค.
- ์คํ๋ง ์ปจํ ์ด๋๋ ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ (DI)ํฉ๋๋ค.
- ๋จ์ํ ์๋ฐ ์ฝ๋๋ฅผ ํธ์ถํ๋ ๊ฒ ๊ฐ์ง๋ง, ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์ค์ ๋ก ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ๋ค์ด ์ฐ๊ฒฐ๋๋ ๊ฒ์ ๋๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ , ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ์คํ๋ง ๋น๋ ๋ฑ๋กํ๊ณ , ์์กด ๊ด๊ณ๋ฅผ ์ค์ ์ ์๋ฃํ์์ต๋๋ค.
๐ญ๊ธ ์ ๋ฆฌ
- ์คํ๋ง ๋น์ ์คํ๋ง์ ์ํ์ฌ ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ ์๋ฐ ๊ฐ์ฒด์ ๋๋ค.
- ์คํ๋ง ์ปจํ ์ด๋๋ ์คํ๋ง์์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ๊ณต๊ฐ์ ๋๋ค. ์ฆ, ๋น์ ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง๋ฅผ ๊ฐ๋ฐ์ ๋์ ๊ด๋ฆฌํด ์ฃผ๋ ๊ณณ์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ ๊ด๋ฆฌํด์ผ ํ ๊ฐ์ฒด๋ฅผ ์คํ๋ง์๊ฒ ๋งก๊ฒผ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ฐ ์ญ์ ๋ ๊ฒ์ ๋๋ค.
- ์คํ๋ง์ปจํ ์ด๋๋ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํด์ฃผ์ด ๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค ํจํด์ผ๋ก ์ ์งํ ์ ์์ต๋๋ค.
๐ค๊ทธ๋ ๋ค๋ฉด ์ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ๊น?
์๋ฐ๋ฅผ ๋ฐฐ์ธ ๋ ๊ฐ์ฒด๋ก์จ ์ฌ์ฉํ๊ธฐ ์ํด์๋ new ์์ฑ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ์์น์ ์งํค์ง ๋ชปํ๊ฒ ๋์ด ์๋ก์ ๋ํ ์์กด์ฑ์ด ๋์์ง๊ฒ ๋ฉ๋๋ค. ์ฆ, ์ข์ ๊ฐ์ฒด ์ค๊ณ ์งํฅ ์์น์ ๋ฐ๋ผ DIP์ ์๋ฐ๋ฉ๋๋ค. ๊ทธ๋์ ์์กด์ฑ์ ๋ฎ์ถ๊ธฐ ์ํด Spring ์ปจํ ์ด๋๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์์ฝํ์๋ฉด ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ํ๊ณ , ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ์ ๋ฎ์ถ๊ธฐ ์ํด Spring ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
'๐์คํฐ๋ > ์คํ๋ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง AOP (0) | 2024.05.19 |
---|---|
์คํ๋ง MVC ๊ธฐ๋ณธ ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ํต์ฌ ๊ฐ๋ (0) | 2024.05.19 |
[์คํ๋ง] - ์คํ๋ง ์ปดํฌ๋ํธ ์ค์บ (0) | 2024.04.15 |