์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์ ๋๋ค.
์ด์ ๊ธ์์ AppConfig์ฒ๋ผ DI์ IoC๋ฅผ ํด์ฃผ๋ ๊ฒ์ DI ์ปจํ ์ด๋๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ํ์๋ค. ์ด๋ฒ์๋ ์คํ๋ง์์ DI์ IoC๋ฅผ ์ ๊ณตํ๋ ์คํ๋ง ์ปจํ ์ด๋์ ๋ํด ์์๋ณด์.
1. ์คํ๋ง ์ปจํ ์ด๋๋?
์คํ๋ง ์ปจํ ์ด๋๋ ์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๊ฐ์ฒด๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ์คํ๋ง ๋น ์ฌ์ด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ ๊ฒ ๋ฐ๋ก ์คํ๋ง ์ปจํ ์ด๋์ ์ญํ ์ด๋ค. ์ด์ ๊ธ์์ ๋ณด์๋ AppConfig์ ์ญํ ์ ๋ด๋นํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ธฐ์กด์ AppConfig์๋ ๋ญ๊ฐ ๋ค๋ฅด๊ธธ๋ ๊ตณ์ด ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์ฐ๋ ๊ฑธ๊น?
2. ์คํ๋ง ์ปจํ ์ด๋ ์ค์ ์ ๋ณด ๊ตฌ์ฑํ๊ธฐ
๋ฌผ๋ก ์คํ๋ง ์ปจํ ์ด๋๋ผ๊ณ ํด์ ์ฒ์๋ถํฐ ๋ฌด์จ ํด๋์ค์ ๋ฌด์จ ๊ตฌํ์ฒด๊ฐ ํ์ํ์ง์ ๋ํด ์๊ณ ์๋ ๊ฑด ์๋๋ค. ๋๋ฌธ์ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ํด๋ผ์ด์ธํธ์ ์ด๋ค ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ด์ค์ง์ ๋ํด์, ์ฆ ์ค์ ์ ๋ณด๋ ํ๋ก๊ทธ๋จ์ ์ง๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ์๋ ค์ฃผ์ด์ผ ํ๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ์๋์ ๊ฐ์ด ๋ค์ํ ์ค์ ํ์์ ์ง์ํ๋ค.
(1) ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์๋ฐ ์ฝ๋๋ก ์ค์ ํ๊ธฐ
๋จผ์ ์ค์ ์ ๋ณด๋ฅผ ํด๋์ค์ ๋ด์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
@Configuration
public class AppConfig {
@Bean
public OrderService orderService() {
return new OrderServiceImpl(discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
์ด์ ์ AppConfig์ ๋ช๊ฐ์ง ์ ๋ ธํ ์ด์ ์ ์ถ๊ฐํ ์ํ์ด๋ค.
์คํ๋ง ์ปจํ
์ด๋๋ @Configuration
์ด ๋ถ์ ํด๋์ค๋ฅผ ์ค์ ์ ๋ณด๋ก ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ์ ๋ณด ํด๋์ค์์@Bean
์ ๋
ธํ
์ด์
์ด ๋ฌ๋ฆฐ ๋ฉ์๋๋ฅผ ๋ชจ๋ ํธ์ถํ ๋ค, ๋ฐํ๋ ์ธ์คํด์ค๋ฅผ ์ปจํ
์ด๋ ์์ ๋ฑ๋กํ๋ค. ์ด๋ ๊ฒ ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์คํ๋ง ๋น์ด๋ผ๊ณ ํ๋ค.
์คํ๋ง ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก @Bean
์ด ๋ถ์ ๋ฉ์๋์ ์ด๋ฆ์ ์์ ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค. ์์ ์ฝ๋๋ฅผ ์๋ก ๋ค์ด๋ณด์๋ฉด, discountPolicy
๋ผ๋ ์ด๋ฆ์ ๋น์ FixDiscountPolicy
์ธ์คํด์ค๋ฅผ ๊ฐ๊ณ ์๋ค.
(2) XML๋ก ์ค์ ํ๊ธฐ
์ต๊ทผ์๋ ์ ์ฌ์ฉํ์ง ์์ง๋ง, ๋ ๊ฑฐ์ ํ๋ก์ ํธ๋ค์ ์ฌ์ ํ ์ค์ ์ ๋ณด๊ฐ 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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="orderService" class="hello.core.order.OrderServiceImpl">
<constructor-arg name="discountPolicy" ref="discountPolicy"/>
</bean>
<bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy"/>
</beans>
XML๋ก ์ค์ ํ ๋๋ <constructor-arg>
ํ๊ทธ๋ฅผ ํตํด ์์ฑ์์ ํ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ๋๋ค. ref="discountPolicy"
์์๋ id๊ฐ discountPolicy
์ธ ๋น์ ์ฐพ์ ์ฃผ์
ํด์ค๋ค.
3. ์คํ๋ง ์ปจํ ์ด๋ ์์ฑํ๊ธฐ
์ด์ ์ค์ ์ ๋ณด๋ฅผ ๋๊ฒจ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์์ฑํด๋ณด์.
์ ๋
ธํ
์ด์
๊ธฐ๋ฐ ์๋ฐ ์ฝ๋๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ ์์ฃผ ์ฌ์ฉํ๋ฏ๋ก, ์๋ฐ ์ฝ๋ ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ดํด๋ณด๊ฒ ๋ค.
// ์ ๋
ธํ
์ด์
๊ธฐ๋ฐ ์๋ฐ ์ฝ๋๋ก ์ค์ ํ์ ๋
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
// xml ํ์ผ๋ก ์ค์ ํ์ ๋
ApplicationContext applicationContext = new GenericXmlApplicationContext(appConfig.xml);
new AnnotationConfigApplicationContext(AppConfig.class);
๋ฅผ ํตํด ์คํ๋ง ์ปจํ
์ด๋ ApplicationContext
๊ฐ ์์ฑ๋๋ค.
ApplicationContext
๋ ์ธํฐํ์ด์ค, AnnotationConfigApplicationContext
๋ ๊ตฌํ ํด๋์ค๋ก, ๊ตฌํ ํด๋์ค์ ์์ฑ์์ ์ค์ ํด๋์ค๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ์ฃผ๋ฉด ์ค์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์์ฑ๋๋ค.
์คํ๋ง ์ปจํ
์ด๋ ์์๋ ์คํ๋ง ๋น ์ ์ฅ์๋ผ๋๊ฒ ์กด์ฌํ๋๋ฐ, ์คํ๋ง ๋น ์ ์ฅ์์๋ Map<String, Object>
๊ฐ์ ๋๋์ผ๋ก ๋น ์ด๋ฆ๊ณผ ๊ทธ์ ๋์๋๋ ๋น ๊ฐ์ฒด๊ฐ ์ ์ฅ๋์ด ์๋ค. ์คํ๋ง ์ปจํ
์ด๋๋ AppConfig.class
์์ @Bean
์ด ๋ฌ๋ฆฐ ๋ฉ์๋๋ฅผ ์ ๋ถ ํธ์ถํ์ฌ ๋ฉ์๋๋ช
์ ๋น ์ด๋ฆ์ผ๋ก, ๋ฐํ ๊ฐ์ฒด๋ฅผ ๋น ๊ฐ์ฒด๋ก ํ์ฌ ์ ์ฅ์์ ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ค. ์ด ๋ ์ฃผ์ํด์ผ ํ ์ ์, ๋น ์ด๋ฆ์ ์ค๋ณต๋๋ฉด ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
ํด์ฃผ๋ฉด ์คํ๋ง ์ปจํ
์ด๋์ ์์ฑ์ด ์๋ฃ๋๋ค. AppConfig๋ฅผ ์๋ก ๋ค์๋ฉด, orderService
์๊ฒ discountPolicy
๋ฅผ ์ฃผ์
ํด์ฃผ๋ ๊ฒ์ด๋ค.
4. ์คํ๋ง ์ปจํ ์ด๋์์ ๋น ์กฐํํ๊ธฐ
@Configuration
public class AppConfig {
@Bean
public OrderService orderService() {
return new OrderServiceImpl(discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
public class Main {
public static void main(String args[]) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
OrderService orderService = applicationContext.getBean("orderService");
orderService.createOrder();
...
}
}
์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋ก๋ ๋น์ applicationContext.getBean()
๋ฉ์๋๋ฅผ ํตํด ์กฐํํ ์ ์๋ค. ๊ฐ๋ฐ์๋ ์คํ๋ง ์ปจํ
์ด๋์์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ฐพ์์์ ์ฌ์ฉํ๋ฉด ๋๋ค. getBean(๋น์ด๋ฆ, ํ์
)
ํ์์ผ๋ก ์ด๋ฆ๊ณผ ํ์
์ ํตํด ์กฐํํ ์๋ ์๊ณ , getBean(ํ์
)
์ฒ๋ผ ํ์
์ผ๋ก๋ง ์กฐํํ ์๋ ์๋ค.
๋จ, ํ์
์ผ๋ก ์กฐํํ๋ ๊ฒฝ์ฐ ๋ถ๋ชจ ํ์
์ผ๋ก ์กฐํํ๋ฉด ๊ทธ ์์ ํ์
๊น์ง ์ ๋ถ ์กฐํ๋๋ค. ์๋ฅผ ๋ค์ด, DiscountPolicy
ํ์
์ผ๋ก ์กฐํํ๋ฉด FixDiscountPolicy
์ RateDiscountPolicy
ํ์
์ ๋น๊น์ง ์กฐํ๋๋ค๋ ๋ง์ด๋ค. ๋ง์ฝ ์กฐํํ ๋น์ด ์๊ฑฐ๋, ํ์
์ผ๋ก ์กฐํํ์ ๋ ๊ฐ์ ํ์
์ ๋น์ด 2๊ฐ ์ด์์ด๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
์ฐธ๊ณ : https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html
'๐๐ฉ๐ซ๐ข๐ง๐ > ๐๐๐ฌ๐ข๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ปดํฌ๋ํธ ์ค์บ (0) | 2023.09.02 |
---|---|
์คํ๋ง์์์ ์ฑ๊ธํค ํจํด (0) | 2023.09.02 |
์ ์ด์ ์ญ์ (IoC)๊ณผ ์์กด๊ด๊ณ ์ฃผ์ (DI)์ด๋? (0) | 2023.08.28 |
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (0) | 2023.08.28 |
Spring๊ณผ ๊ฐ์ฒด์งํฅ์ ๋ํ์ฌ (0) | 2023.08.28 |
์ธํ๋ฐ ๊น์ํ๋์ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ ๊ฐ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์ ๋๋ค.
์ด์ ๊ธ์์ AppConfig์ฒ๋ผ DI์ IoC๋ฅผ ํด์ฃผ๋ ๊ฒ์ DI ์ปจํ ์ด๋๋ผ๊ณ ๋ถ๋ฅธ๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ํ์๋ค. ์ด๋ฒ์๋ ์คํ๋ง์์ DI์ IoC๋ฅผ ์ ๊ณตํ๋ ์คํ๋ง ์ปจํ ์ด๋์ ๋ํด ์์๋ณด์.
1. ์คํ๋ง ์ปจํ ์ด๋๋?
์คํ๋ง ์ปจํ ์ด๋๋ ์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , ๊ฐ์ฒด๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ์คํ๋ง ๋น ์ฌ์ด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ ๊ฒ ๋ฐ๋ก ์คํ๋ง ์ปจํ ์ด๋์ ์ญํ ์ด๋ค. ์ด์ ๊ธ์์ ๋ณด์๋ AppConfig์ ์ญํ ์ ๋ด๋นํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ธฐ์กด์ AppConfig์๋ ๋ญ๊ฐ ๋ค๋ฅด๊ธธ๋ ๊ตณ์ด ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์ฐ๋ ๊ฑธ๊น?
2. ์คํ๋ง ์ปจํ ์ด๋ ์ค์ ์ ๋ณด ๊ตฌ์ฑํ๊ธฐ
๋ฌผ๋ก ์คํ๋ง ์ปจํ ์ด๋๋ผ๊ณ ํด์ ์ฒ์๋ถํฐ ๋ฌด์จ ํด๋์ค์ ๋ฌด์จ ๊ตฌํ์ฒด๊ฐ ํ์ํ์ง์ ๋ํด ์๊ณ ์๋ ๊ฑด ์๋๋ค. ๋๋ฌธ์ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ํด๋ผ์ด์ธํธ์ ์ด๋ค ๊ตฌํ์ฒด๋ฅผ ๋ฃ์ด์ค์ง์ ๋ํด์, ์ฆ ์ค์ ์ ๋ณด๋ ํ๋ก๊ทธ๋จ์ ์ง๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ์๋ ค์ฃผ์ด์ผ ํ๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ์๋์ ๊ฐ์ด ๋ค์ํ ์ค์ ํ์์ ์ง์ํ๋ค.
(1) ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ ์๋ฐ ์ฝ๋๋ก ์ค์ ํ๊ธฐ
๋จผ์ ์ค์ ์ ๋ณด๋ฅผ ํด๋์ค์ ๋ด์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
@Configuration
public class AppConfig {
@Bean
public OrderService orderService() {
return new OrderServiceImpl(discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
์ด์ ์ AppConfig์ ๋ช๊ฐ์ง ์ ๋ ธํ ์ด์ ์ ์ถ๊ฐํ ์ํ์ด๋ค.
์คํ๋ง ์ปจํ
์ด๋๋ @Configuration
์ด ๋ถ์ ํด๋์ค๋ฅผ ์ค์ ์ ๋ณด๋ก ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์ ์ ๋ณด ํด๋์ค์์@Bean
์ ๋
ธํ
์ด์
์ด ๋ฌ๋ฆฐ ๋ฉ์๋๋ฅผ ๋ชจ๋ ํธ์ถํ ๋ค, ๋ฐํ๋ ์ธ์คํด์ค๋ฅผ ์ปจํ
์ด๋ ์์ ๋ฑ๋กํ๋ค. ์ด๋ ๊ฒ ์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์คํ๋ง ๋น์ด๋ผ๊ณ ํ๋ค.
์คํ๋ง ๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก @Bean
์ด ๋ถ์ ๋ฉ์๋์ ์ด๋ฆ์ ์์ ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค. ์์ ์ฝ๋๋ฅผ ์๋ก ๋ค์ด๋ณด์๋ฉด, discountPolicy
๋ผ๋ ์ด๋ฆ์ ๋น์ FixDiscountPolicy
์ธ์คํด์ค๋ฅผ ๊ฐ๊ณ ์๋ค.
(2) XML๋ก ์ค์ ํ๊ธฐ
์ต๊ทผ์๋ ์ ์ฌ์ฉํ์ง ์์ง๋ง, ๋ ๊ฑฐ์ ํ๋ก์ ํธ๋ค์ ์ฌ์ ํ ์ค์ ์ ๋ณด๊ฐ 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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="orderService" class="hello.core.order.OrderServiceImpl">
<constructor-arg name="discountPolicy" ref="discountPolicy"/>
</bean>
<bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy"/>
</beans>
XML๋ก ์ค์ ํ ๋๋ <constructor-arg>
ํ๊ทธ๋ฅผ ํตํด ์์ฑ์์ ํ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ๋๋ค. ref="discountPolicy"
์์๋ id๊ฐ discountPolicy
์ธ ๋น์ ์ฐพ์ ์ฃผ์
ํด์ค๋ค.
3. ์คํ๋ง ์ปจํ ์ด๋ ์์ฑํ๊ธฐ
์ด์ ์ค์ ์ ๋ณด๋ฅผ ๋๊ฒจ ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์์ฑํด๋ณด์.
์ ๋
ธํ
์ด์
๊ธฐ๋ฐ ์๋ฐ ์ฝ๋๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ ์์ฃผ ์ฌ์ฉํ๋ฏ๋ก, ์๋ฐ ์ฝ๋ ์ค์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ดํด๋ณด๊ฒ ๋ค.
// ์ ๋
ธํ
์ด์
๊ธฐ๋ฐ ์๋ฐ ์ฝ๋๋ก ์ค์ ํ์ ๋
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
// xml ํ์ผ๋ก ์ค์ ํ์ ๋
ApplicationContext applicationContext = new GenericXmlApplicationContext(appConfig.xml);
new AnnotationConfigApplicationContext(AppConfig.class);
๋ฅผ ํตํด ์คํ๋ง ์ปจํ
์ด๋ ApplicationContext
๊ฐ ์์ฑ๋๋ค.
ApplicationContext
๋ ์ธํฐํ์ด์ค, AnnotationConfigApplicationContext
๋ ๊ตฌํ ํด๋์ค๋ก, ๊ตฌํ ํด๋์ค์ ์์ฑ์์ ์ค์ ํด๋์ค๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ์ฃผ๋ฉด ์ค์ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์์ฑ๋๋ค.
์คํ๋ง ์ปจํ
์ด๋ ์์๋ ์คํ๋ง ๋น ์ ์ฅ์๋ผ๋๊ฒ ์กด์ฌํ๋๋ฐ, ์คํ๋ง ๋น ์ ์ฅ์์๋ Map<String, Object>
๊ฐ์ ๋๋์ผ๋ก ๋น ์ด๋ฆ๊ณผ ๊ทธ์ ๋์๋๋ ๋น ๊ฐ์ฒด๊ฐ ์ ์ฅ๋์ด ์๋ค. ์คํ๋ง ์ปจํ
์ด๋๋ AppConfig.class
์์ @Bean
์ด ๋ฌ๋ฆฐ ๋ฉ์๋๋ฅผ ์ ๋ถ ํธ์ถํ์ฌ ๋ฉ์๋๋ช
์ ๋น ์ด๋ฆ์ผ๋ก, ๋ฐํ ๊ฐ์ฒด๋ฅผ ๋น ๊ฐ์ฒด๋ก ํ์ฌ ์ ์ฅ์์ ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ค. ์ด ๋ ์ฃผ์ํด์ผ ํ ์ ์, ๋น ์ด๋ฆ์ ์ค๋ณต๋๋ฉด ์๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
ํด์ฃผ๋ฉด ์คํ๋ง ์ปจํ
์ด๋์ ์์ฑ์ด ์๋ฃ๋๋ค. AppConfig๋ฅผ ์๋ก ๋ค์๋ฉด, orderService
์๊ฒ discountPolicy
๋ฅผ ์ฃผ์
ํด์ฃผ๋ ๊ฒ์ด๋ค.
4. ์คํ๋ง ์ปจํ ์ด๋์์ ๋น ์กฐํํ๊ธฐ
@Configuration
public class AppConfig {
@Bean
public OrderService orderService() {
return new OrderServiceImpl(discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
public class Main {
public static void main(String args[]) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
OrderService orderService = applicationContext.getBean("orderService");
orderService.createOrder();
...
}
}
์คํ๋ง ์ปจํ
์ด๋์ ๋ฑ๋ก๋ ๋น์ applicationContext.getBean()
๋ฉ์๋๋ฅผ ํตํด ์กฐํํ ์ ์๋ค. ๊ฐ๋ฐ์๋ ์คํ๋ง ์ปจํ
์ด๋์์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์ฐพ์์์ ์ฌ์ฉํ๋ฉด ๋๋ค. getBean(๋น์ด๋ฆ, ํ์
)
ํ์์ผ๋ก ์ด๋ฆ๊ณผ ํ์
์ ํตํด ์กฐํํ ์๋ ์๊ณ , getBean(ํ์
)
์ฒ๋ผ ํ์
์ผ๋ก๋ง ์กฐํํ ์๋ ์๋ค.
๋จ, ํ์
์ผ๋ก ์กฐํํ๋ ๊ฒฝ์ฐ ๋ถ๋ชจ ํ์
์ผ๋ก ์กฐํํ๋ฉด ๊ทธ ์์ ํ์
๊น์ง ์ ๋ถ ์กฐํ๋๋ค. ์๋ฅผ ๋ค์ด, DiscountPolicy
ํ์
์ผ๋ก ์กฐํํ๋ฉด FixDiscountPolicy
์ RateDiscountPolicy
ํ์
์ ๋น๊น์ง ์กฐํ๋๋ค๋ ๋ง์ด๋ค. ๋ง์ฝ ์กฐํํ ๋น์ด ์๊ฑฐ๋, ํ์
์ผ๋ก ์กฐํํ์ ๋ ๊ฐ์ ํ์
์ ๋น์ด 2๊ฐ ์ด์์ด๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
์ฐธ๊ณ : https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html
'๐๐ฉ๐ซ๐ข๐ง๐ > ๐๐๐ฌ๐ข๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ปดํฌ๋ํธ ์ค์บ (0) | 2023.09.02 |
---|---|
์คํ๋ง์์์ ์ฑ๊ธํค ํจํด (0) | 2023.09.02 |
์ ์ด์ ์ญ์ (IoC)๊ณผ ์์กด๊ด๊ณ ์ฃผ์ (DI)์ด๋? (0) | 2023.08.28 |
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น (0) | 2023.08.28 |
Spring๊ณผ ๊ฐ์ฒด์งํฅ์ ๋ํ์ฌ (0) | 2023.08.28 |