EEALL@ONCE

๐ŸŒฑ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ณธ๋ฌธ

Spring๐ŸŒฑ

๐ŸŒฑ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ

์˜ฌ์—ฃ์›์Šค 2023. 7. 23. 16:14
728x90

ApplicationContext

ApplicationContext applicationContext =new AnnotationConfigApplicationContext(AppConfig.class);
Spring Framework์—์„œ ApplicationContext๋Š” Bean์„ ๊ด€๋ฆฌํ•˜๊ณ  Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” Spring ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

1. ApplicationContext๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฉฐ

2. Spring Container๋Š” xml ๊ธฐ๋ฐ˜๊ณผ annotation ๊ธฐ๋ฐ˜์ด ์žˆ๋‹ค.

3. ๋”ฐ๋ผ์„œ AnnotationConfigApplicationContext ์ด ๋ถ€๋ถ„์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ์˜ ๊ตฌํ˜„์ฒด ์ธ๊ฑฐ๋‹ค. 

 

๊ทผ๋ฐ, ๊ทธ๋Ÿฌ๋ฉด ๋‚˜๋Š” ์•ž์—์„œ container์™€ context๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„  ์™œ ๋˜ ๊ฐ™๋‹ค๊ณ  ์ ๋Š” ๊ฑธ๊นŒ?

"Spring ์ปจํ…์ŠคํŠธ"์™€ "Spring ์ปจํ…Œ์ด๋„ˆ"๋ฅผ ๋ณ„๋„๋กœ ์–ธ๊ธ‰ํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ์ธก๋ฉด์„ ๊ฐ•์กฐํ–ˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ์šฉ์–ด๊ฐ€ Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ปจํ…์ŠคํŠธ์—์„œ ์ข…์ข… ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
Spring ์ปจํ…์ŠคํŠธ์™€ Spring ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ๊ณ  ์šฉ์–ด๊ฐ€ ์ข…์ข… ์ƒํ˜ธ ๊ตํ™˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ "Spring ์ปจํ…์ŠคํŠธ" ๋˜๋Š” "Spring ์ปจํ…Œ์ด๋„ˆ"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ—ˆ์šฉ๋˜๋ฉฐ Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋™์ผํ•œ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ ์€ 'ApplicationContext' ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ‘œ์‹œ๋˜๋Š” Spring ์ปจํ…์ŠคํŠธ๊ฐ€ ๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  Spring ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

๋ผ๊ณ  ๐Ÿ€์ฅฃ์Œค์ด ๋งํ•ด์คฌ๋‹ค..์ฅฃ์„ ์ƒ๋‹˜ํ•œํ…Œ ๋Œ€์ถฉ ๋ฌป๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ์ด๋ ‡๊ฒŒ ํ˜ผ๋ž€์ด ์˜จ๋‹ค.. ๋” ์ง‘์š”ํ•˜๊ฒŒ ๋ฌผ์–ด๋ด์•ผ์ง€...! 

๋ฌดํŠผ ๊ทธ๋ž˜์„œ, 

๊ทธ๋Ÿผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ ๋ ๊นŒ? 

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ตฌ์„ฑ์ •๋ณด๋ฅผ ์ฝ์–ด์™€์„œ ๋นˆ ์ €์žฅ์†Œ์— ๋นˆ์ด๋ฆ„๊ณผ ๋นˆ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋†“๋Š”๋‹ค. 
์ด๋•Œ, ๋นˆ ์ด๋ฆ„์€ method ์ด๋ฆ„ / ๋นˆ ๊ฐ์ฒด๋Š” ๋ฉ”์†Œ๋“œ์˜ return ๊ฐ’์œผ๋กœ ๋„˜์–ด์˜จ ๊ฒƒ์ด๋‹ค. 

@Bean
public DiscountPolicy discountPolicy(){
    return new FixDiscountPolicy();
};

์ด ๊ฒฝ์šฐ ๋นˆ ์ด๋ฆ„์€ DiscountPolicy์ด๊ณ  ๋นˆ ๊ฐ์ฒด๋Š” FixDiscountPolicy์ด๋‹ค. 

๋ฌผ๋ก , ๋นˆ ์ด๋ฆ„ ๊ฒฝ์šฐ ์ง์ ‘ ๋ถ€์—ฌํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด @Bean(name="DP") ์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค.
ํ•˜์ง€๋งŒ, ๊ทธ๋ƒฅ ๋ฉ”์†Œ๋“œ ๋„ค์ž„์„ ์“ฐ๋„๋ก ํ•˜์ž.. ๋ณดํ†ต ๊ทธ๋ ‡๊ฒŒ ์“ด๋‹ค๊ณ  ํ•˜๋‹ˆ.. 

โŒ์ฃผ์˜์ ์œผ๋กœ๋Š” Bean์˜ ์ด๋ฆ„์€ Uniqueํ•ด์•ผํ•œ๋‹ค. ์™œ๋ƒ๋ฉด, ๋™์ผ Bean์ด ์กด์žฌ์‹œ ์„ค์ •์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ!! 

๊ทธ๋Ÿผ ์ด์ œ ๋นˆ์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š”๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณผํ…๋ฐ..

์Šคํ”„๋ง ๋นˆ ์˜์กด๊ด€๊ณ„ ์„ค์ •

@Bean
public MemberRepository memberRepository(){
    return new MemoryMemberRepository();
}

@Bean
public DiscountPolicy discountPolicy(){
    return new FixDiscountPolicy();
};

@Bean
public MemberService memberService() {
    return new MemberServiceImpl(memberRepository());
}

@Bean
public OrderService orderService(){
    return new OrderServiceImpl(memberRepository(),discountPolicy());
}

728x90