# Spring / IoC, DI, Container
Study Repository

Spring / IoC, DI, Container

by rlaehddnd0422

1. IoC ( Inversion of Control ) - ์ œ์–ด์—ญ์ „

(DIP๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์€) ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์€ ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„ ๊ฐ์ฒด๊ฐ€ ์Šค์Šค๋กœ ํ•„์š”ํ•œ ์„œ๋ฒ„ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์—ฐ๊ฒฐ, ์‹คํ–‰ํ–ˆ์—ˆ๋‹ค.

์ฆ‰ ๊ตฌํ˜„ ๊ฐ์ฒด๊ฐ€ ์ œ์–ด ํ๋ฆ„์„ ์กฐ์ •ํ–ˆ๋‹ค. 

 

AppConfig ๋“ฑ์žฅํ•œ ์ดํ›„ ๊ตฌํ˜„ ๊ฐ์ฒด๋Š” ๋กœ์ง๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์ œ์–ด ํ๋ฆ„์€ AppConfig๊ฐ€ ๋„๋งก์•„์„œ ์กฐ์ •ํ•˜์˜€๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ œ์–ดํ๋ฆ„์„ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์ œ์–ด์—ญ์ „(IoC)๋ผ๊ณ  ํ•จ.

 

2. ํ”„๋ ˆ์ž„์›Œํฌ vs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ์ง์ ‘ ์ œ์–ด์˜ ํ๋ฆ„์„ ๋‹ด๋‹นํ•œ๋‹ค -> ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค -> ํ”„๋ ˆ์ž„์›Œํฌ

 

3. ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž… ( Dependency Injection )

 

- ์ด์ „ ํฌ์ŠคํŒ…์˜ OrderServiceImp์€ DiscountPolicy ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•œ๋‹ค. ์‹ค์ œ ์–ด๋–ค ๊ตฌํ˜„ ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ๋ ์ง€๋Š” OrderServiceImp์—์„œ ์•Œ ์ˆ˜ ์—†๋‹ค.

 

 

์˜์กด๊ด€๊ณ„๋Š” ์ •์ ์ธ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„์™€, ์‹คํ–‰ ์‹œ์ ์— ๊ฒฐ์ •๋˜๋Š” ๋™์ ์ธ ๊ฐ์ฒด ์˜์กด๊ด€๊ณ„ ๋‘˜์„ ๋ถ„๋ฆฌํ•ด์„œ ์ƒ๊ฐํ•ด์•ผ ํ•จ.

 

์ •์  ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„

- import ์ฝ”๋“œ๋งŒ ๋ณด๊ณ  ์˜์กด๊ด€๊ณ„ ํŒŒ์•… ๊ฐ€๋Šฅ.

- OrderServiceImpl ์€ MemberRepository , DiscountPolicy ์— ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

- ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„ ๋งŒ์œผ๋กœ๋Š” ์‹ค์ œ ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ OrderServiceImpl ์— ์ฃผ์ž… ๋ ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

 

์ƒ์† ๊ด€๊ณ„
์‹ค์ œ ๋‹ค์ด์–ด๊ทธ๋žจ

๋™์ ์ธ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์˜์กด ๊ด€๊ณ„

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— ์‹ค์ œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์˜์กด ๊ด€๊ณ„.

> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ (๋Ÿฐํƒ€์ž„)์— ์™ธ๋ถ€์—์„œ ์‹ค์ œ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์‹ค์ œ ์˜์กด๊ด€๊ณ„๊ฐ€ ์—ฐ๊ฒฐ ๋˜๋Š” ๊ฒƒ์„ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์ด๋ผ๊ณ  ํ•จ.

> ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ์ฐธ์กฐ๊ฐ’์„ ์ „๋‹ฌํ•ด์„œ ์—ฐ๊ฒฐ๋œ๋‹ค.

> ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์ƒ์˜ ํƒ€์ž… ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ

 

AppConfig์ฒ˜๋Ÿผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ๊ด€๋ฆฌ, ์˜์กด๊ด€๊ณ„ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๊ฒƒ์„ IoC Container, DI Container๋ผ๊ณ  ํ•œ๋‹ค.

 

3. ์Šคํ”„๋ง์œผ๋กœ ์ „ํ™˜

AppConfig

AppConfig์— ์„ค์ •์„ ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ๋œป์˜ ์–ด๋…ธํ…Œ์ด์…˜ @Configuration์„ ๋ถ™์—ฌ์ค€๋‹ค.

๊ฐ ๋ฉ”์†Œ๋“œ์— ์–ด๋…ธํ…Œ์ด์…˜ @Bean์„ ๋ถ™ํ˜€์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.

 

 

MemberApp

> ApplicationContext๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ผ ํ•œ๋‹ค.

> ๊ธฐ์กด์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ AppConfig ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  DI๋ฅผ ํ–ˆ์ง€๋งŒ, ์ด์ œ๋ถ€ํ„ฐ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

> ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” @Configuration์ด ๋ถ™์€ AppConfig๋ฅผ ๊ตฌ์„ฑ(์„ค์ •) ์ •๋ณด๋กœ ์‚ฌ์šฉ. 

> ์—ฌ๊ธฐ์„œ @Bean์ด๋ผ ์ ํžŒ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ชจ๋‘ ํ˜ธ์ถœํ•ด์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก

> ์Šคํ”„๋ง ๋นˆ์€ @Bean ์ด ๋ถ™์€ ๋ฉ”์„œ๋“œ์˜ ๋ช…์„ ์Šคํ”„๋ง ๋นˆ์˜ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ( memberService , orderService )

> ์ด์ „์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ AppConfig ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ์กฐํšŒํ–ˆ์ง€๋งŒ, ์ด์ œ๋ถ€ํ„ฐ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด์„œ ํ•„์š”ํ•œ ์Šคํ”„๋ง ๋นˆ(๊ฐ์ฒด)๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค. ์Šคํ”„๋ง ๋นˆ์€ applicationContext.getBean() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

> ๊ธฐ์กด์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ž๋ฐ”์ฝ”๋“œ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ํ–ˆ๋‹ค๋ฉด ์ด์ œ๋ถ€ํ„ฐ๋Š” ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ , ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ ์Šคํ”„๋ง ๋นˆ์„ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

 

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ