Spring

TIL Spring #2-3

๋ฆฐ์˜ˆ์กฐ 2023. 12. 12. 09:05

IoC / DI

IoC Container & bean

 


 

- ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์ด ์šฐ์„ ๋˜์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์–ด๋””์— ์ƒ์„ฑํ• ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ๊นŒ? ์ด๊ฒƒ์„ Spring์—์„œ ๋„์™€์ค€๋‹ค!

 

bean: Spring์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด

IoC Container: Bean ์„ ๋ชจ์•„๋‘” ์ปจํ…Œ์ด๋„ˆ

 

- ๋“ฑ๋ก๋ฐฉ๋ฒ•?

๋“ฑ๋กํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค ์œ„์— @Component ์• ๋„ˆํ…Œ์ด์…˜์„ ์ž‘์„ฑํ•ด์ค€๋‹ค! 

 

 

์ด๋ ‡๊ฒŒ ์• ๋„ˆํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค์— ํ•œํ•ด Spring์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

 

Spring ๊ด€๋ จํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š”๋ฐ ๊ฑฐ๊ธฐ์— @ComponentScan ์ด๋ผ๋Š” ์• ๋„ˆํ…Œ์ด์…˜์ด ์žˆ๋‹ค!

๊ทธ๋ž˜์„œ @Component ํ•ด๋‹น ์• ๋„ˆํ…Œ์ด์…˜์ด ์žˆ๋Š” ํŒจํ‚ค์ง€์™€ ํ•˜์œ„ ํŒจํ‚ค์ง€๋ฅผ ๋ชจ๋‘ ๋Œ์•„๋‹ค๋‹ˆ๋ฉด์„œ ์• ๋„ˆํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ bean์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค.

์–ด๋–ป๊ฒŒ?

- ํด๋ž˜์Šค์˜ ์ด๋ฆ„ ์•ž๊ธ€์ž๋งŒ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•ด์„œ IoC ์ปจํ…Œ์ด๋„ˆ์— Bean! ์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค!

ex) MemoService ํด๋ž˜์Šค๋ฅผ memoService ์ด๋ฆ„์œผ๋กœ bean์— ๋“ฑ๋ก๋˜๋ฉฐ IoC Container ์— ์ €์žฅ๋œ๋‹ค!

 

bean ๋“ฑ๋ก ์™„๋ฃŒ.

 

-> ๊ทธ๋ ‡๋‹ค๋ฉด bean ์œผ๋กœ ๋“ฑ๋ก๋งŒ ํ•ด๋‘๋ฉด ์•Œ์•„์„œ ๊ฐ์ฒด๊ฐ€ ์ฃผ์ž…๋ ๊นŒ์š”?!

:

์ถ”๊ฐ€์ ์œผ๋กœ @Autowired ํ•ด๋‹น ์• ๋„ˆํ…Œ์ด์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๋Ÿฐ๋ฐ ๊ทธ์ „๊นŒ์ง€ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฌด๋ฆฌ์—†์ด ์ง„ํ–‰๋œ ์ด์œ ๋Š” spring 4.3 ์ดํ›„ ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ํ•ด๋‹น ์• ๋„ˆํ…Œ์ด์…˜ ์ƒ๋žต์ด ๊ฐ€๋Šฅ!

but, ์ƒ์„ฑ์ž ์„ ์–ธ์ด ํ•œ ๊ฐœ์ผ ๋•Œ๋งŒ ๊ฐ€๋Šฅ!!

 

 

DI(์ฃผ์ž…) ํ•˜๋Š” ๋ฐฉ์‹์€ ์›๋ž˜ ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž 3๊ฐ€์ง€๋กœ ๋˜์–ด์žˆ์ง€๋งŒ ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž์— ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค.

 

ex) ์ƒ์„ฑ์ž ์ฃผ์ž… ๋ฐฉ์‹

public MemoService(MemoRepository memoRepository) {
        this.memoRepository = memoRepository;
    }

 

- ํ•„๋“œ, ๋ฉ”์„œ๋“œ๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์—๋„ ์ž‘์„ฑํ•˜๊ณ  @Autowired ์• ๋„ˆํ…Œ์ด์…˜๋งŒ ๋‹ฌ์•„์ฃผ๋ฉด ๋œ๋‹ค.

 

์˜์กด์„ฑ ์ฃผ์ž…์€ ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž ์„ธ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๋Šฅํ•œ๋ฐ

๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ๋ฐฉ์‹์ด ๊ฐ€์žฅ ์ถ”์ฒœ๋œ๋‹ค.

 

<์ •๋ฆฌ>

๋”๋ณด๊ธฐ

 @Component ๋ถ™์€ ํด๋ž˜์Šค๋“ค์„ bean ์œผ๋กœ ๋“ฑ๋ก.

์ถ”ํ›„ ์˜์กด์„ฑ ์ฃผ์ž…์ด ํ•„์š”ํ•œ ๊ณณ์— @Autowired ์• ๋„ˆํ…Œ์ด์…˜ ์ž‘์„ฑ. 

Spring์—์„œ ํ•ด๋‹น ์• ๋„ˆํ…Œ์ด์…˜์„ ๋ณด๊ณ  ์•Œ์•„์„œ IoC Container์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” bean ํด๋ž˜์Šค ์ฃผ์ž…ํ•ด์ค€๋‹ค.

 

# ํ•ด๋‹น @Autowired ์ ์šฉ ์กฐ๊ฑด

= Spring IoC Container์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” Bean ํด๋ž˜์Šค๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. 

๋‹น์—ฐํ•œ ๋ง. ์ฃผ์ž…ํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค ์ž์ฒด๊ฐ€ Bean ํด๋ž˜์Šค์ธ๋ฐ ์ฃผ์ž…๋ฐ›๊ณ ์žํ•˜๋Š” ํด๋ž˜์Šค๋Š” Bean ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋‹ค? ๊ทธ๋Ÿด ์ˆ˜๊ฐ€ ์—†๋‹ค.

๋‘ ํด๋ž˜์Šค ๋ชจ๋‘ Bean ํด๋ž˜์Šค์—ฌ์•ผ ํ•œ๋‹ค!

 

๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” DI๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •?..

 

 

'Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

TIL Spring #2-5  (0) 2023.12.13
TIL Spring #2-4  (0) 2023.12.12
TIL Spring 2-2  (0) 2023.12.08
TIL Spring 2-1  (1) 2023.12.07
TIL Spring 1-3  (0) 2023.12.06