EEALL@ONCE
๐ฑIoC,DI,์ปจํ ์ด๋ ๋ณธ๋ฌธ
์ ์ด์ ์ญ์ IoC(Inversion of Control)
๊ตฌํ ๊ฐ์ฒด(์๊ฐ ์ญํ )์ด ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ ( ๋ฐฐ์ฐ ์บ์คํ ์ด๋ผ๊ณ ํ๋๊ฑธ ) ์ค์ค๋ก ํ๋ค๋ฉด, AppConfig ์ดํ์๋ ๊ตฌํ ๊ฐ์ฒด๋ ์๊ธฐ ๋ก์ง๋ง ์คํํ๋ ํ๋ ์ญํ ์ ํ๊ณ (๊ธ์ ์ ๊ฐ๋ง ์ ๊ฒฝ์ฐ๊ณ ) ํ๋ก๊ทธ๋จ์ ์ ์ด์ ํ๋ฆ์ AppConfig ๊ฐ ์ํํ๋ค.
์ฆ ๋๊ฐ ๋ด ๊ธ์ ์ผ์คํ ๋ ์ง๋ ๋ชจ๋ฅธ์ฒด, ๊ทธ๋ฅ ์์ฌ๋ง ์ ์์์ฌ๋ฆฌ๋ฉด ๋๋๊ฒ ์ ์ด์ ์ญ์ (IoC)์ด๋ค. ( ๊ตฌํ ๊ฐ์ฒด๊ฐ ๋๊ฐ ์บ์คํ ๋ ์ง ๋ชฐ๋ผ์ ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ํ๋ ๊ฒ ๊ฐ๋ค!)
ํ๋ ์์ํฌ vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ํ๋ ์์ํฌ๋ฉด ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ ์ดํ๊ณ , ๋์ ์คํ ( JUnit)
- ๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์ง์ ์ ์ด์ ํ๋ฆ์ ๋ด๋นํ๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์์กด๊ด๊ณ์ ์ฃผ์ DI(Dependency Injection)
์์กด๊ด๊ณ์๋ ์ ์ ์ธ ํด๋์ค ์์กด ๊ด๊ณ์ ๋์ ์ธ ๊ฐ์ฒด(์ธ์คํด์ค) ์ ์์กด ๊ด๊ณ๊ฐ ์๋ค.
์ ์ ์ธ ํด๋์ค ์์กด ๊ด๊ณ๋
์ฝ๊ฒ ๋งํ์๋ฉด ํด๋น ํด๋์ค์์ import์ฝ๋๋ก ๋ณด์ด๋ ์์กด ๊ด๊ณ์ด๋ค.
๋ฐ๋ผ์ ์ฝ๊ฒ ๋ถ์๊ฐ๋ฅํ๋ค.
๋์ ์ธ ๊ฐ์ฒด ์์กด ๊ด๊ณ๋
์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์์ ์ ์ค์ ์์ฑ๋ ๊ฐ์ฒด ์ธ์คํด์ค์ ์ฐธ์กฐ๊ฐ ์ฐ๊ฒฐ๋ ์์กด ๊ด๊ณ์ด๋ค. ์ฆ AppConfig์์ ์ค์ ๋ ์์กด ๊ด๊ณ์ด๋ค.
์คํ ์ง์ ์ ์ธ๋ถ์์ ์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํด์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ค์ ์์กด๊ด๊ณ๊ฐ ์ฐ๊ฒฐ ๋๋ ๊ฒ์ ์์กด๊ด๊ณ ์ฃผ์
์ด๋ผ ํ๋ค. ์ฝ๊ฒ ๋งํ์๋ฉด, ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ ๋, ์บ์คํ
๋ ๋ฐฐ์ฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋๊ฒจ์ฃผ๋ ๊ฑฐ๋ค.
์ด๋ ๊ฒ ํ๋ฉด, ํด๋ผ์ด์ธํธ์ ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์๊ณ , ์์กด๊ด๊ณ๋ฅผ ์ธ๋ถ์์ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.!
์ฌ์ค ์์ ์ ์๋ ์ด์ผ๊ธฐ์ ๋ฐ๋ณต์ ์ธ ์ด์ผ๊ธฐ๋ค. ๊ฒฐ๊ตญ์ ์บ์คํ ์ ๋ค๋ฅธ ๊ณณ์์ ํ๊ณ , ํด๋ผ์ด์ธํธ๋ ๊ธ๋ง ์จ๋ผ๋ ๊ฑฐ๋ค!
IoC ์ปจํ ์ด๋, DI ์ปจํ ์ด๋
App Config์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ฉด์ ์์กด๊ด๊ณ๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ ๊ฒ์ IoC ์ปจํ ์ด๋, DI ์ปจํ ์ด๋๋ผ๊ณ ํ๋ค.
๋๋ก๋ assembler, object factory ๋ผ๊ณ ํ๊ธฐ๋ ํ๋ค.
'Spring๐ฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฑ ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ (0) | 2023.07.23 |
---|---|
๐ฑ ์์ํ ์๋ฐ ์ฝ๋๋ก DIํ ๋ถ๋ถ ์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ (์คํ๋ง ์ปจํ ์คํธ/ ์คํ๋ง ์ปจํ ์ด๋) (0) | 2023.07.23 |
๐ฑ App Config -> ์ฌ์ฉ ์์ญ / ๊ตฌ์ฑ ์์ญ (0) | 2023.07.23 |
๐ฑ AppConfig ๋ฆฌํฉํฐ๋ง (0) | 2023.07.21 |
๐ฑ์๋น์ค ๋ถ๋ถ ๋ก์ง ๋ฐ๊พธ๊ธฐ ( OCP, DIP ์ ์ฉ ๋ฒ์ ) (0) | 2023.07.11 |