์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ
์ง๊ธ๊น์ง ์์ํ ์๋ฐ ์ฝ๋๋ง์ผ๋ก DI๋ฅผ ์ ์ฉํ๋ค. ์ด์ ์คํ๋ง์ ์ฌ์ฉํด๋ณด์.
@Configuration
public class AppConfig {
AppConfig์ ์ค์ ์ ๊ตฌ์ฑํ๋ค๋ ๋ป์ @Configuration ์ ๋ถ์ฌ์ค๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ @Configuration ์ด ๋ถ์ AppConfig ๋ฅผ ์ค์ (๊ตฌ์ฑ) ์ ๋ณด๋ก ์ฌ์ฉํ๋ค.
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
๊ฐ ๋ฉ์๋์ @Bean ์ ๋ถ์ฌ์ค๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์คํ๋ง ์ปจํ
์ด๋์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
์คํ๋ง ์ปจํ ์ด๋
ApplicationContext ๋ฅผ ์คํ๋ง ์ปจํ ์ด๋๋ผ ํ๋ค.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
๋ฉ์๋์ ๋ช ("memberService")์ ์คํ๋ง ๋น์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ
๋น ์ด๋ฆ์ ๋ฉ์๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค.
new AnnotationConfigApplicationContext(AppConfig.class)
์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋๋ ๊ตฌ์ฑ ์ ๋ณด๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค. ์ฌ๊ธฐ์๋ AppConfig.class ๋ฅผ ๊ตฌ์ฑ ์ ๋ณด๋ก ์ง์ ํ๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ @Configuration ์ด ๋ถ์ AppConfig ๋ฅผ ์ค์ (๊ตฌ์ฑ) ์ ๋ณด๋ก ์ฌ์ฉํ๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ ์ค์ ํด๋์ค ์ ๋ณด(AppConfig)๋ฅผ ์ฌ์ฉํด์ ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ค.
์ฌ๊ธฐ์ @Bean ์ด๋ผ ์ ํ ๋ฉ์๋๋ฅผ ๋ชจ๋ ํธ์ถํด์ ๋ฐํ๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋กํ๋ค.
์ด๋ ๊ฒ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ๋น์ด๋ผ ํ๋ค.
์คํ๋ง ์ปจํ
์ด๋๋ ์ค์ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํด์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
(DI)ํ๋ค.
๋จ์ํ ์๋ฐ ์ฝ๋๋ฅผ ํธ์ถํ๋ ๊ฒ ๊ฐ์ง๋ง, ์ฐจ์ด๊ฐ ์๋ค. ์ด ์ฐจ์ด๋ ๋ค์ ์ฑ๊ธํค ์ปจํ ์ด๋์์ ์ค๋ช ํ๋ค.
์ฐธ๊ณ
์คํ๋ง์ ๋น์ ์์ฑํ๊ณ , ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํ๋ ๋จ๊ณ๊ฐ ๋๋์ด์ ธ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ์๋ฐ ์ฝ๋๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ฉด ์์ฑ์๋ฅผ ํธ์ถํ๋ฉด์ ์์กด๊ด๊ณ ์ฃผ์ ๋ ํ๋ฒ์ ์ฒ๋ฆฌ๋๋ค