๐Ÿ˜ƒ์Šคํ”„๋ง ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection) ์ด๋ž€ ???

Yangrayยท2021๋…„ 8์›” 30์ผ
0

Spring ์˜์กด์„ฑ ๊ด€๊ณ„

๋ชฉ๋ก ๋ณด๊ธฐ
1/1
@Controller
public class MemberController {
   private final MemberService memberService;
     @Autowired
     public MemberController(MemberService memberService) {
     this.memberService = memberService;
   }
}

์ƒ์„ฑ์ž์— @Autowired๊ฐ€ ์žˆ์œผ๋ฉด ์ž๋™์œผ๋กœ ์Šคํ”„๋ง์ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ฐพ์•„์„œ ๋„ฃ์–ด์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด๋ฅผ ์˜์กด๊ด€๊ณ„๋ฅผ ์™ธ๋ถ€์—์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์„ DI(Dependency Injection) ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ๊ณ  ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์˜์กด์„ฑ ์ฃผ์ž…(DI Dependency Injection)์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ????

๐Ÿ˜ฎ์˜์กด์„ฑ์ด๋ž€???

์˜์กด์„ฑ(Dependency)์ด๋ž€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด ์—†์ด ์ œ๋Œ€๋กœ ๋œ ์—ญํ• ์„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

ํ”ํžˆ A๊ฐ์ฒด๊ฐ€ B๊ฐ์ฒด ์—†์ด ๋™์ž‘์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์„ 'A๊ฐ€ B์— ์˜์กด์ ์ด๋‹ค.'๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

๐Ÿ˜ฎ์ฃผ์ž…(Injection)์ด๋ž€???

์ฃผ์ž…์€ ๋ง ๊ทธ๋Œ€๋กœ ์™ธ๋ถ€์—์„œ ๋ฐ€์–ด ๋„ฃ๋Š” ๊ฒƒ'์„ ๋œปํ•œ๋‹ค.

์ด์ œ ์˜์กด์„ฑ๊ณผ ์ฃผ์ž…์„ ๊ฒฐํ•ฉํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด '์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์™ธ๋ถ€์—์„œ ๋ฐ€์–ด ๋„ฃ๋Š”๋‹ค.'๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ? ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

์ดํ•ด๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์Œ์‹์ ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž
์Œ์‹์ ์—์„œ ์ฃผ๋ฌธ์ด ๋“ค์–ด์˜ค๋ฉด ์Œ์‹์„ ์กฐ๋ฆฌ ํ›„ ์†Œ๋น„์ž๋“ค์—๊ฒŒ ๋ฐฐ๋‹ฌํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด ๋ณด์ž
์ด๋•Œ ์Œ์‹์ ์—์„œ ์ง์ ‘ ์†Œ๋น„์ž๋“ค์—๊ฒŒ ๋ฐฐ๋‹ฌํ•˜์ง€ ์•Š๊ณ , ๋ฐฐ๋‹ฌ๋Œ€ํ–‰์—…์ฒด๋ฅผ ํ†ตํ•ด์„œ ๋ฐฐ๋‹ฌํ•œ๋‹ค๋ฉด,
์Œ์‹์  ์ž…์žฅ์—์„œ๋Š” ์Œ์‹์„ ์ฃผ๋ฌธ์„ ๋ฐ›๊ณ , ์กฐ๋ฆฌํ•˜๋Š” ๊ฒƒ๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
์ด๋ฅผ ์ฝ”๋“œ์— ๋Œ€์ž…ํ•ด์„œ ๋ณด๋ฉด ์ฃผ์ž…์„ ๋ฐ›๋Š” ๊ฐ์ฒด ์ž…์žฅ์—์„œ๋Š” ์–ด๋–ค ๊ฐ์ฒด๋“  ์ž์‹ ์˜ ์—ญํ• ์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ผ๋Š” ์˜๋ฏธ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž… ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ๊ทธ๋ฆผ์˜ ๋ฐ”๊นฅ์ชฝ ๋„ํ˜•์ฒ˜๋Ÿผ ์ถ”๊ฐ€์ ์ธ ํ•˜๋‚˜์˜ ์กด์žฌ๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ์กด์žฌ๋Š” ์˜์กด์„ฑ์ด ํ•„์š”ํ•œ ๊ฐ์ฒด์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„์„œ ์ฃผ์ž…ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

์Šคํ”„๋ง์€ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์ ํ•ฉํ•œ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.
์Šคํ”„๋ง์—์„œ๋Š” 'ApplicationContext'๋ผ๋Š” ์กด์žฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฐ์ฒด๋“ค์„ ์ฃผ์ž…ํ•˜๋Š” ์—ญํ• ์„ ํ•ด ์ฃผ๋Š” ๊ตฌ์กฐ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์Šคํ”„๋ง์„ ์ด์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋‹ฌ๋ฆฌ ๊ฐ์ฒด์™€ ๊ฐ์ฒด๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ์ƒ์„ฑํ•˜๊ณ , ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋“ค์„ ์—ฎ๋Š” ์ž‘์—…์„ ํ•˜๋Š” ํ˜•ํƒœ์˜ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.
์Šคํ”„๋ง์—์„œ๋Š” ApplicationContext๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์„ ๋นˆ(Bean)์ด๋ผ๋Š” ์šฉ์–ด๋กœ ๋ถ€๋ฅด๊ณ , ๋นˆ๊ณผ ๋นˆ ์‚ฌ์ด์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ XML ์„ค์ •, ์–ด๋…ธํ…Œ์ด์…˜ ์„ค์ •, JAVA ์„ค์ • ๋ฐฉ์‹์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
์‹œ์ž‘์€ ๋ฏธ์•ฝํ•˜๋‚˜ ๊ทธ ๋์€ ์ฐฝ๋Œ€ํ•˜๋ฆฌ๋ผ

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2021๋…„ 8์›” 30์ผ

๊ธ€ ์ž˜๋ดค์Šต๋‹ˆ๋‹ค!!

1๊ฐœ์˜ ๋‹ต๊ธ€