๐จโ๐ง์ ์์ Spring IoC/DI
[10๋ถ ํ ์ฝํก] ๐จโ๐ง์ ์์ Spring IoC/DI ๋ฅผ ์ฝ๊ณ ์ ๋ฆฌ
์คํ๋ง์ ๋ ์ผ๊ฐํ
- IoC/DI: Inversion of Control / Dependency Injection
- AOP: Aspect Oriented Programming
- PSA : Portable Service Abstraction
IoC/ DI๋
- ์คํ๋ง ํ๋ ์์ํฌ์ ๊ทผ๊ฐ
- ์ค๋ธ์ ํธ์ ์๋ช ์ฃผ๊ธฐ์ ์์กด๊ด๊ณ์ ๋ํ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
- ์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ
์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ๋ฐ์ด๋๋ค
โ ๋ณ๊ฒฝ์ด ์์ ๋ ์์ ์ด ์ฝ๋ค
โ ์์ ํ ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋๋ค
โ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ์ ์ด๋ฃจ์ด์ก๋ค.
์ ๋ตํจํด
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ? ๊ด๋ จํ ๋ง์ ๋์์ธ ํจํด์ด ์๋ค. ๊ทธ์ค ๋ํ์ ์ธ ๊ฒ์ด ๋ฐ๋ก ์ ๋ตํจํด

MovingStrategy๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ , ์ด์๋ํ ๊ตฌํ์ฒด๋ฅผ ๋ฐ๋ก ๊ตฌํํ์ฌ ์์ง์์ ๋ํ ์ฝ๋๋ฅผ ์์ ํ๊ณ ์ถ์ ๋ ์๋์ฐจ์ ๋ํ ์์ ์ ํ์ง ์๊ณ MovingStrategy๋ผ๋ ์ธํฐํ์ด์ค ํน์ ๊ตฌํ์ฒด๋ง ์์ ํ๋ฉด ๋๋ค.
ํ์ง๋ง ๋ค์ ๋์ด์ผ ์๊ฐํด๋ณด์
Car ๊ฐ์ฒด๋ ์ค์ค๋ก ์ด๋ค MovingStrategy๋ฅผ ์ฌ์ฉํ ์ง ์ ํํ ์ ์๋ค. ์์ ์ด ์ฌ์ฉํ MovingStrategy๋ฅผ ์ง์ ์์ฑํ๊ณ ์์ง๋ ์๋ค. ๊ทธ๋ฌ๋ค ๋ณด๋ ์์ ์ด ์ด๋ค MovingStrategy๋ฅผ ์ฌ์ฉํด์ ์๋์ ํ๊ฒ ๋ ์ง ์กฐ์ฐจ Car ๊ฐ์ฒด ์ค์ค๋ก๋ ๋ชจ๋ฅธ๋ค.
์ ๋ตํจํด์ ์ฌ์ฉ์ด ๊ณง ์ ์ด๊ฐ ์ค์ค๋ก์๊ฒ ์์์ ์์ํ๋ค.
์ ์ด๊ถ์ Car ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ธ Client์ ์กด์ฌํ๋ค.
Client๊ด์ ์์์ ์ ๋ตํจํด

Racing์ด๋ผ๋ ํด๋ผ์ด์ธํธ ๊ฐ์ฒด์ด๋ค. ์ฌ๊ธฐ์ Car ๊ฐ์ฒด์ ๋ํ ๋ชจ๋ ์ ์ด๋ฅผ ํ๊ณ ์์์ ์ ์ ์๋ค. Car ๊ฐ์ฒด์ ์ด๋ค movingStrategy๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง ์ ํด์ ์์ฑํด์ฃผ๊ณ ์์ผ๋ฉฐ ์ด๋ค ํ๋์ ํ ๊ฒ์ธ์ง(๋ฉ์๋์ ์ฌ์ฉ)๋ ์ ์ดํ๊ณ ์๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ์ ์ ํ ์ด๋ฃจ์ด์ง ์ฝ๋๋ผ๊ณ ๋ณด๊ธฐ ํ๋ค๋ค. Racing ์ด๋ผ๋ ๊ฐ์ฒด์ ์ฑ ์์ Racing์ ํ๋ ๊ฒ์ธ์ง ์๋์ฐจ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ค. ์ฆ Racing ๊ธฐ๋ฅ๊ณผ ์๋์ฐจ ์์ฑ์ ์ฑ ์์ด ์์ฌ์๋ค๊ณ ๋ณผ ์ ์๋ค.
์ ์ด์ ๋ ๊ฐ์ง ๊ด์
์ ์์์์ ์ ์ ์๋ ๊ฒ์ ์ ์ด์ ๋ ๊ฐ์ง ๊ด์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ด๋ค. Car ์์ฑ์ ๋ํ ์ ์ด์ ๊ด์ ๊ณผ Car์ ํน๋์๋ํ ์ ์ด์ ๊ด์ ๋๊ฐ์ง์ด๋ค.

์ ์ด์ ๋๊ฐ์ง ๊ด์ ์ ์ ๋ค๋ฆญํ๊ฒ ํํํ์๋ฉด ์ ์ฌ๋ผ์ด๋์ ๊ฐ๋ค. Racing ๊ฐ์ฒด๋ 2๋ฒ ๊ด์ ์์์ ์ ์ด๊ฐ ์ด์ธ๋ฆฌ๋ฉฐ ์ด์ ๋ํ ์ฑ ์์ ์ค๋ ๋๋ค.
ํ์ง๋ง ์์ฑ ๊ด์ ์์์ ์ ์ด๋ ๋ถ๋ฆฌ๋๋ ๊ฒ์ด ์ข๊ฒ ๋ค. โ ํฉํ ๋ฆฌ ํด๋์ค์ ํ์์ฑ!
์ค๋ธ์ ํธ ํฉํ ๋ฆฌ

์ด์ ์ผ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๊ฐ ์ ์ ํ ์ด๋ฃจ์ด์ก๋ค. ์ฒซ ๋ฒ์งธ๋ก, ์์ฑ์ ๋ํ ์ ์ด๊ถ์ CarFactory๊ฐ ๋ด๋นํ๊ฒ ๋์๊ณ ,
๋๋ฒ์งธ์ธ Car ๊ฐ์ฒด ํ๋์ ๊ดํ ์ ์ด๋ Racing ๊ฐ์ฒด๊ฐ ๋ด๋นํ๊ฒ ๋์๋ค
์๋์ฐจ์ ์์ง์ ๋ฐฉ์์ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด?
โ Car factory์ ์์ฑ์์ ์ํ๋ MovingStrategy์ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค์ด ๋ฃ์ด์ฃผ๋ฉด ๋๋ค
Racing ๋ฐฉ์์ ๋ฐ๊พธ๊ณ ์ถ๋ค?
โ ๋ ์ด์ฑ ๊ฐ์ฒด์์ ์๋์ฐจ์ ํ๋์ ๋ํ ์ฝ๋๋ฅผ ์์ ํ๋ฉด ๋๋ค.
์คํ๋ง IOC/DI
์คํ๋ง์ IOC/DI ๊ธฐ๋ฅ๊ณผ ์์ ํฉํ ๋ฆฌ ํด๋์ค, ํด๋ผ์ด์ธํธ๋ ๊ต์ฅํ ์ ์ฌํ๋ค.
์ด๋ค ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ๊ณ ์์ฑ๋ ๊ฒ์ธ๊ฐ?
- ํฉํ ๋ฆฌํด๋์ค โ ์คํ๋ง์ ๋น ์ปจํ ์ด๋๊ฐ ๋ด๋นํ๋ค.
์ด๋ป๊ฒ ์ฌ์ฉ๋ ๊ฒ์ธ๊ฐ?
- ํด๋ผ์ด์ธํธ ํด๋์คโ ์คํ๋ง ๋ด๋ถ ์ฝ๋๊ฐ ๋ด๋นํ๋ค.
์ฐ๋ฆฌ๋ ์คํ๋ง์ ์ฌ์ฉํ๋ฉด์, Controller, Service ๊ทธ๋ฆฌ๊ณ ๊ฐ์ข Bean๋ค์ ๋ํด ๊ตฌํ์ฒด๋ค์ ๊ตฌํํ๊ณ ์์ง๋ง ์ด๊ฒ๋ค์ด ์ด๋ป๊ฒ ์์ฑ๋๊ณ ์ด๋ป๊ฒ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งบ๋์ง ์ ๋ถ Config ํ์ผ, ๊ทธ๋ฆฌ๊ณ ๋น ์ปจํ ์ด๋๊ฐ ๋ด๋นํด์ฃผ๊ณ ์๊ณ ์ฐ๋ฆฌ๋ ํฌ๊ฒ ๊ด์ฌ์ ๊ฐ์ง ์์๋ ๋๋ค.
++ ์ฐ๋ฆฌ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค ์ฝ๋๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋์ด์ ์ธ์ ๋์ํ๋์ง์ ๊ดํ ์ฝ๋๋ ์์ฑํด๋ณธ์ ์ด ์๋ค.(ํด๋ผ์ด์ธํธ ํด๋์ค) ๋ชจ๋ ์คํ๋ง์ ๋ด๋ถ์ ์ธ ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ๋ด๋นํด์ฃผ๊ณ ์๋ ๊ฒ์ด๋ค.
๊ฒฐ๋ก
IOC/DI๋ ์ฌ์ค ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ฝ๋ฉ ํจํด๋ค์ด๋ค.
๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ํตํด ์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ์ฌ์ด ์ฝ๋๋ฅผ ๋ง๋ค๋ค ๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ ๋ง๋ค์ด์ง ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ด๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ