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 ์ผ๋ก ๋ฑ๋ก๋ง ํด๋๋ฉด ์์์ ๊ฐ์ฒด๊ฐ ์ฃผ์ ๋ ๊น์?!
:
์ถ๊ฐ์ ์ผ๋ก @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 |