๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring

@RequiredArgsConstructor ์™€ @Autowired์˜ ์ฐจ์ด

๐Ÿ’ก ํ† ๋น„์˜ ์Šคํ”„๋ง 3.1 Vol1์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๊ณต๋ถ€ํ•ด ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์ค„์— ์š”์•ฝ์ด ์žˆ์œผ๋‹ˆ ๋ฐ”์˜์‹  ๋ถ„๋“ค์€ ๋งˆ์ง€๋ง‰ ์ค„๋งŒ ๋ณด์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰๊ณผ ์ฃผ์ž…

์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(DI, Dependency Injection)์ด์™ธ์—๋„ ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰(DL, Dependency Lookup)์ด๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•œ๋‹ค. ์ด๋Š” ์˜์กด๊ด€๊ณ„๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฃผ์ž…๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž์‹ ์ด ํ•„์š”๋กœ ํ•˜๋Š” ์˜์กด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ์ฐพ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰(Dependency LookUp)์€ ์Šค์Šค๋กœ ์ปจํ…Œ์ด๋„ˆ์— ์š”์ฒญํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

public UserDao(){
	DaoFactory daoFactory = new DaoFactory()
	this.connectionMaker = daoFactory.connectionMaker()
}

์ฆ‰ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…์ด ์•„๋‹ˆ๋ผ ์Šค์Šค๋กœ IoC ์ปจํ…Œ์ด๋„ˆ์ธ DaoFactory์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์Šคํ”„๋งIoC ์ปจํ…Œ์ด๋„ˆ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์ŠคํŠธ๋Š” getBean() ์ด๋ผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ณด์•˜์„๋•Œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…(DI)์ด๋‚˜ ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰(DL)์€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์ง€๋งŒ ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์กด์žฌํ•˜๋‹ค.

“์˜์กด๊ด€๊ณ„” ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ ์•ˆ์— ์˜ค๋ธŒ์ ํŠธ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋‚˜ ์Šคํ”„๋ง API๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋œ๋‹ค.

์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ™์ด ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์— ์˜์กดํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ• ๋•Œ๋Š” ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ main() ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— DI๋ฅผ ํ†ตํ•ด์„œ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋‹ด๊ธด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰ ๋ฐฉ์‹์„ ์ด์šฉํ•ด ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—๋Š” main()๋ฉ”์„œ๋“œ๊ฐ€ ์—†์–ด ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ํ•  ์ˆ˜ ์—†๋‹ค.

 

 

์˜์กด๊ด€๊ณ„ ๊ฒ€์ƒ‰(DL)์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ๋„ ์žˆ๋Š”๋ฐ

๊ฒ€์ƒ‰ํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋Š” ์ž์‹ ์ด ์Šคํ”„๋ง์˜ ๋นˆ์ผ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์ด๋‹ค.

 

์ถ”๊ฐ€

โž•์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž… ๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ด๋ฏธ ํŠน์ • ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค๋ฉด DI๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•œ ๋‹คํ˜•์„ฑ์œผ๋กœ ์ฃผ์ž…๋ฐ›์•„์•ผํ•œ๋‹ค.

โž•์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ฉด LomBok์˜@RequiredArgsConstructor์™€ @Autowired๋Š” ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์–ด์ฃผ์ง€๋งŒ ๊ทธ ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Junit์„ ์ด์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ์‹œ์—๋„ @RequiredArgsConstructor ๋ฅผ ํ†ตํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.