๐ฑ ์คํ๋ง ํ๋ ์์ํฌ์ ์ฌ์ฅ, IoC ์ปจํ ์ด๋์ ๋น(Bean)
์คํ๋ง์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ๊ผญ ๋ง์ฃผํ๊ฒ ๋๋ ๊ฐ๋
, ๋ฐ๋ก IoC ์ปจํ
์ด๋
์ ๋น(Bean)
์
๋๋ค.
์ฒ์์ ์ด๋ ต๊ฒ ๋๊ปด์ง์ง๋ง, ๊ฐ๋
์ ํ๋์ฉ ํ์ด๋ณด๋ฉด ๋๋๋๋ก ๊น๋ํ๊ฒ ์ดํด๋ฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ Spring์ IoC ์ปจํ
์ด๋๊ฐ ๋ญ ํ๋์ง, Bean์ด ์ ์ค์ํ์ง ์ฐฌ์ฐฌํ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
๐ IoC๋? (Inversion of Control)
IoC๋ โ์ ์ด์ ์ญ์ โ์ด๋ผ๋ ๋ง ๊ทธ๋๋ก,
๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ์ง ์๊ณ , ์ปจํ
์ด๋๊ฐ ๋์ ํ๋ ๊ฐ๋
์
๋๋ค.
์ ํต ๋ฐฉ์๊ณผ์ ์ฐจ์ด์
๊ตฌ๋ถ | ์ ํต์ ์ธ ๋ฐฉ์ | IoC ๋ฐฉ์ (Spring) |
---|---|---|
๊ฐ์ฒด ์์ฑ | ์ง์ new ํด์ ๋ง๋ฆ | ์ปจํ ์ด๋๊ฐ ์์์ ์์ฑ |
์์กด์ฑ ์ฃผ์ | ์ง์ ์ฐพ์์ ์ฐ๊ฒฐ | ์ปจํ ์ด๋๊ฐ ์์์ ๋ฃ์ด์ค |
โ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ฐ๊ฒฐํ๋ ์ฃผ๋๊ถ์ ์ปจํ ์ด๋์๊ฒ ๋๊ธด ๊ฒโ
์ด๊ฒ ๋ฐ๋ก ์ ์ด์ ์ญ์ ์ ๋๋ค.
๐ IoC์ ๊ตฌํ ๋ฐฉ์ - DI (Dependency Injection)
์คํ๋ง์์๋ IoC๋ฅผ DI, ์์กด์ฑ ์ฃผ์
์ด๋ผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํฉ๋๋ค.
์ฆ, ๊ฐ์ฒด๊ฐ ํ์ํ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ค์ค๋ก ๋ง๋ค์ง ์๊ณ , ์ธ๋ถ(์ปจํ
์ด๋)์์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์
๋๋ค.
DI์ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ
๋ฐฉ๋ฒ | ์ค๋ช |
---|---|
์์ฑ์ ์ฃผ์ | ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ |
Setter ์ฃผ์ | ์์ฑ ํ Setter ๋ฉ์๋๋ก ์ฃผ์ |
ํ๋ ์ฃผ์ (์ถ์ฒX) | ํ๋์ ๋ฐ๋ก ์ฃผ์ (ํ ์คํธ ์ด๋ ค์) |
์คํ๋ง์ ์ด ์์กด์ฑ ์ ๋ณด๋ค์ ๋ฏธ๋ฆฌ ํ์ ํด์, ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ํ์ํ ์์กด์ฑ๊น์ง "์๋"์ผ๋ก ๋ฃ์ด์ค๋๋ค.
๐๏ธ IoC ์ปจํ ์ด๋๋?
IoC ์ปจํ ์ด๋๋ ๋ง ๊ทธ๋๋ก Spring์ด ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ ๊ฐ์ฒด๋ค์ ๋ฑ๋กํด๋๋ฉด, ํ์ํ ๋ ์๋์ผ๋ก ์์ฑํ๊ณ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ์ฃ .
์ปจํ ์ด๋์ ๋ ๊ฐ์ง ๋ํ ๊ตฌํ์ฒด
์ข ๋ฅ | ํน์ง |
---|---|
BeanFactory | ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ปจํ ์ด๋ (๊ฐ๋ณ์ง๋ง ๊ธฐ๋ฅ ์ ํ์ ) |
ApplicationContext | BeanFactory + ๋ค์ํ ๊ธฐ๋ฅ(AOP, ์ด๋ฒคํธ, ๋ฉ์์ง ์ฒ๋ฆฌ ๋ฑ) |
๐ก ๋๋ถ๋ถ์ ์ค๋ฌด์์๋ ๊ธฐ๋ฅ์ด ๋ ํ๋ถํ ApplicationContext
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๐ซ Bean์ด๋?
Spring ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ฌ์ค ๊ทธ๋ฅ ํ๋ฒํ ์๋ฐ ๊ฐ์ฒด(POJO)์ง๋ง,
Spring์๊ฒ โ์ด๊ฑฐ ๊ด๋ฆฌํด์คโ ํ๊ณ ๋ฑ๋กํ๋ฉด ๊ทธ๊ฒ๋ถํฐ Bean์ด ๋๋ ๊ฑฐ์์.
์ฆ,
class MemberService {}
์ด๊ฑด ๊ทธ๋ฅ ํด๋์ค
๊ทธ๋ฐ๋ฐ,
@Component public class MemberService {}
์ด๋ ๊ฒ ๋ฑ๋กํ๋ฉด โ Bean!
๐ Bean์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
Spring ์ปจํ
์ด๋๋ Bean๊ณผ ๊ทธ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์๊ธฐ ์ํด ๊ตฌ์ฑ ์ ๋ณด
๊ฐ ํ์ํฉ๋๋ค.
์ด ๊ตฌ์ฑ ์ ๋ณด๋ ๋ค์ ์ธ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ค์ ํ ์ ์์ด์.
๋ฐฉ๋ฒ | ์ค๋ช | ์์ |
---|---|---|
XML ์ค์ | ์ ํต์ ์ธ ๋ฐฉ์ | <bean id="memberService" class="..."/> |
์๋ฐ ์ค์ | @Configuration ํด๋์ค์์ @Bean ์ผ๋ก ๋ฑ๋ก |
@Bean public MemberService memberService() {} |
์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ | ์๋ ๊ฐ์ง ๋ฐฉ์ | @Component , @Service , @Repository ๋ฑ |
์์ฆ์ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ๋ฐฉ์์ด ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ ๋๋ค.
โ ์์ ์ฝ๋ ๋ชจ์
1. ๐ XML ์ค์ ๋ฐฉ์
<!-- applicationContext.xml -->
<beans>
<bean id="memberService" class="com.example.MemberService" />
</beans>
2. โ๏ธ ์๋ฐ ์ค์ ๋ฐฉ์
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberService();
}
}
3. ๐งฉ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ๋ฐฉ์ (์์ฆ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ฐฉ์)
@Component
public class MemberService {
// ๋น์ฆ๋์ค ๋ก์ง
}
// ์ปดํฌ๋ํธ ์ค์บ์ ํตํด ์๋ ๋ฑ๋ก
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
๐งญ ํต์ฌ ์์ฝ
๊ฐ๋ | ์ค๋ช |
---|---|
IoC | ๊ฐ์ฒด ์์ฑ/์ฐ๊ฒฐ์ ๊ฐ๋ฐ์๊ฐ ์๋ ์ปจํ ์ด๋๊ฐ ์ํ |
DI | IoC๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์, ์์กด์ฑ ์ธ๋ถ์์ ์ฃผ์ |
BeanFactory | ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ปจํ ์ด๋ ์ธํฐํ์ด์ค |
ApplicationContext | BeanFactory๋ณด๋ค ๋ค์ํ ๊ธฐ๋ฅ ํฌํจํ ์ปจํ ์ด๋ |
Bean | Spring์ด ๊ด๋ฆฌํ๋ ๊ฐ์ฒด (POJO๋ฅผ ์ปจํ ์ด๋์ ๋ฑ๋กํ ๊ฒ) |
๊ตฌ์ฑ ๋ฉํ๋ฐ์ดํฐ | ์ด๋ค ๊ฐ์ฒด๋ฅผ Bean์ผ๋ก ๋ง๋ค๊ณ , ๋ฌด์์ ์ฃผ์ ํ ์ง ์๋ ค์ฃผ๋ ์ค์ ์ ๋ณด |