Spring / IoC, DI, Container
by rlaehddnd04221. 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() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ฐพ์ ์ ์๋ค.
> ๊ธฐ์กด์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์๋ฐ์ฝ๋๋ก ๋ชจ๋ ๊ฒ์ ํ๋ค๋ฉด ์ด์ ๋ถํฐ๋ ์คํ๋ง ์ปจํ ์ด๋์ ๊ฐ์ฒด๋ฅผ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๊ณ , ์คํ๋ง ์ปจํ ์ด๋์์ ์คํ๋ง ๋น์ ์ฐพ์์ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝ๋์๋ค.
'๐ Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring / Single-ton Pattern, Single-ton Container (0) | 2023.01.31 |
---|---|
Spring / Spring Container, Bean (0) | 2023.01.30 |
Spring / AppConfig๋ฅผ ์ด์ฉํ ๊ธฐ์กด์ OCP, DIP ๋ฌธ์ ํด๊ฒฐ (1) | 2023.01.26 |
Spring / ์์ ์๋ฐ๊ธฐ๋ฐ ์์ ( spring framework no use ) (0) | 2023.01.24 |
[Spring] OOP 5๊ฐ์ง ์ค๊ณ์์น (2) | 2023.01.23 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422