์คํ๋ง์ด๋ IOC์ AOP๋ฅผ ์ง์ํ๋ ๊ฒฝ๋์ ์ปจํ ์ด๋ ํ๋ ์ ์ํฌ์ด๋ค.
์ ์ด์ ์ญ์ . ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ฃผ์
๋ฐ ์๋ฉธ์ ๊ฐ๋ฐ์ ๋์ ์คํ๋ง ์ปจํ
์ด๋๊ฐ ํ๋ค. ๊ทธ ์ธ ์ ์ด๊ถ์ ํ๋ ์ ์ํฌ์์ ๊ฐ์ ธ๊ฐ๋ค๋ ๋ง๋ก๋ ์ฐ์ธ๋ค. ๊ฐ์ฒด์ ์์กด์ฑ์ ์ญ์ ์์ผ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ์ค์ด๊ณ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํ์ฌ ๊ฐ๋
์ฑ ๋ฐ ์ฝ๋ ์ค๋ณต, ์ ์ง ๋ณด์๋ฅผ ํธํ๊ฒ ํ ์ ์๊ฒ ํ๋ค.
์คํ๋ง์์๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๊ณ ์คํ๋๋ค.
1. ๊ฐ์ฒด ์์ฑ
2. ์์กด์ฑ ๊ฐ์ฒด ์ฃผ์
3. ์์กด์ฑ ๊ฐ์ฒด ๋ฉ์๋ ํธ์ถ
์์กด์ฑ ์ฃผ์
. ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ์์ฑํ ํ ์ฃผ์
๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์คํ๋ง์ด IOC๋ฅผ ์ค์ ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ๋จํ ๋งํด, A ๊ฐ์ฒด์์ B ๊ฐ์ฒด์ C ๊ฐ์ฒด๋ฅผ ์์กดํ ๋ A ๊ฐ์ฒด์์ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ(IOC ์ปจํ
์ด๋)์์ ์์ฑ๋ B ๊ฐ์ฒด์ C ๊ฐ์ฒด๋ฅผ ์ฃผ์
์์ผ setter()
ํน์ ์์ฑ์๋ฅผ ํตํด ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
์คํ๋ง์ ์ปจํ
์ด๋๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ์ฝ๋์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์์๋ฐ์ ๋
๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์กด์ฌ์ด๋ค. ๊ธฐ์กด์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋, ์ฌ์ฉํ๋ ค๋ ๊ฐ์ฒด ๋ด์์ new ์์ฑ์๋ฅผ ์ด์ฉํ๊ฑฐ๋ getter()
์ setter()
๊ธฐ๋ฅ์ ์จ์ผ ํ๋ค. ์ด๋ฌํ ๊ฐ์ฒด๋ค์ ์ ํ๋ฆฌ์ผ์ด์
๋ด์ ๋ฌด์ํ ๋ง์ด ์กด์ฌํ๊ณ ์๋ก ์ฐธ์กฐํ๋ค. ์ด๋ฅผ ์์กด์ฑ์ด ๋๋ค๊ณ ํํํ๋ค. IOC ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด ์์กด์ฑ์ ๋ฎ์ถ ์ ์๋ค.
BeanFactory์ ApplicationContext๊ฐ ์ด์ ์ํ๋ค.
์คํ๋ง์ IOC ์ปจํ ์ด๋์์ ๊ด๋ฆฌํ๋ POJO(Plain Old Java Object)๋ฅผ ๋ปํ๋ค. ๋น์ ์ฑ๊ธํค(Singleton)์ ํํ์ด๋ค.
์ปจํ
์ด๋์ ๋น์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง๊ฐ ์๋ค.
1. xml ์ค์ ํ์ผ์ ํตํ ๋ฑ๋ก
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
<bean id="bookService" class="com.example.demo.BookService">
<property name="bookRepository" ref="bookRepository" />
</bean>
<bean id="bookRepository" class="com.example.demo.BookRepository">
</bean>
</beans>
์๋ฅผ ๋ค๋ฉด ์ด๋ฐ ๋ฐฉ์์ผ๋ก, ๋ค์ ๊ท์ฐฎ์ ๋ฐฉ๋ฒ์ด๋ค.
2. ์๋ฐ ์ฝ๋๋ฅผ ์ด์ฉํ ๋ฑ๋ก
์ปจํ ์ด๋์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก์์ผ ์ฃผ๋ ์ด๋ ธํ ์ด์ (Annotation)
- @Bean
ํ๋ก๊ทธ๋๋จธ๊ฐ ์ปจํธ๋กคํ ์ ์๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ๋ ค๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค. ๋ฉ์๋๋ก ๋ฆฌํด๋๋ ๊ฐ์ฒด๋ฅผ ๋น์ ๋ฑ๋กํ๋ค.- @Configuration
ํด๋์ค์์ 1๊ฐ ์ด์์ Bean์ ๋ฑ๋กํ๊ณ ์์์ ๋ช ์ํ๋ค. @Bean ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ํด๋์ค์ ๊ฒฝ์ฐ ๋ฐ๋์ ํด๋์ค ์ด๋ฆ ์์ @Configuration์ ํจ๊ป ์ฌ์ฉํด์ฃผ์ด์ผ ํ๋ค.- @Component
ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๊ฐ๋ฐํ ํด๋์ค๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ๋ ค๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค. ์ ์ธ๋ ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
์ปจํ ์ด๋์ ์๋ ์คํ๋ง ๋น์ ์ฐพ์ ์ฃผ์ ์์ผ ์ฃผ๋ ์ด๋ ธํ ์ด์ (Annotation)
- @Autowired
IOC ์ปจํ ์ด๋์ ์๋ ์ฐธ์กฐํ ๋น์ ์ฐพ์ ์ฃผ์ ํ๋ค.
Component-Scan
@ComponentScan์ด๋ผ๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๊ณ ํจํค์ง๋ฅผ ์ ์ด ์ฃผ๋ฉด ํด๋น ํจํค์ง ์๋์ ๋น์ผ๋ก ๋ฑ๋กํ๋ ค๋ ์ด๋ ธํ ์ด์ ์ ์ฐพ์ ๋ชจ๋ ๋น์ผ๋ก ๋ฑ๋กํด ์ค๋ค. ๋น์ผ๋ก ๋ฑ๋กํ๋ ค๋ ์ด๋ ธํ ์ด์ ์ @Component, @Service, @Repository, @Controller, @RestController๋ฅผ ์ฌ์ฉํ๋ค.
์คํ๋ง๋ถํธ์์๋ํจํค์ง์ด๋ฆApplication.java
ํ์ผ(ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ์๋์ผ๋ก ์๊ธฐ๋ ํ์ผ)์์ ApplicationContext๋ฅผ ์ง์ ๋ง๋ค์ด ์ฌ์ฉํ ํ์ ์์ด @SpringBootApplication์ด๋ผ๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด @ComponentScan ๋ฑ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
[Spring] ์คํ๋ง ์์กด์ฑ ์ฃผ์
(DI) ์ด๋?
[Spring] ์์ ๋ก ๋ฐฐ์๋ณด๋ IoC/DI & Spring Bean Life Cycle
[Spring] ์คํ๋ง ๋น(Bean)์ ๊ฐ๋
๊ณผ ์์ฑ ์๋ฆฌ
[SpringBoot] @Bean, @Configuration, @Component ์ด๋
ธํ
์ด์