DIP (Dependency Inversion Principle)
์ธํฐํ์ด์ค ์ญ์ ์ด ์ผ์ด๋ฌ๋๋ ์ค์ํ์ง๋ง, ์์ ๋ ๋ฒจ์ ์ ์ฑ ์ ํ์ ๋ ๋ฒจ์ ์์ธ์ ์์กดํด์๋ ์๋๋ค. ๋ ๋ค ์ถ์ ํ์ (Abstract Type)์ ์์กดํด์ผ ํ๋ค.
Object Oriented์ ํต์ฌ
๊ฐ์ฒด์งํฅ์ ํต์ฌ์ IoC๋ฅผ ํตํด ์์ ๋ ๋ฒจ์ ๋ชจ๋์ ํ์ ๋ ๋ฒจ์ ๋ชจ๋๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด๋ค.
์ ์ด์ ํ๋ฆ์ ์ญ์ ์์ผ ์์ ๋ ๋ฒจ์ ๋ก์ง์ด ํ์ ๋ ๋ฒจ์ ๋ณ๊ฒฝ์ ์ํด์ ์ํฅ์ ๋ฐ์ง ์๋๋ก ํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค.
์? ํ์ ๋ ๋ฒจ์ ๋ณ๊ฒฝ์ ๋น๋ฒํ๊ฒ ์ผ์ด๋ ์ ์๊ธฐ ๋๋ฌธ์
ํ์ ๋ ๋ฒจ์ ๋ชจ๋์ OCP๋ฅผ ์ค์ํ๋ฉฐ ์๋ก์ด ์๊ตฌ์ฌํญ์ ๋ฐ์ํ ์ ์์.
๊ฐ์ฒด์งํฅ ์ค๊ณ์ ํต์ฌ์ '์์กด์ฑ ๊ด๋ฆฌ(dependency management)' ์ด๋ค.
Structured Design
๊ตฌ์กฐ์ ๋์์ธ์ ํ๊ฒ ๋ ๊ฒฝ์ฐ, Top-down ๋ฐฉ์์ผ๋ก ์ค๊ณํ๊ฒ ๋๋ค.
main์์ ์์ํด์ main์ด ํธ์ถํด์ผ ํ๋ ์๋ธ ๋ฃจํด๋ค์ ์ค๊ณ
์๋ธ๋ฃจํด์ด ํธ์ถํด์ผ ํ ์๋ธ๋ฃจํด์ ์ค๊ณ
๊ทธ๋ฆฌ๊ณ ์์คํ ์ ๋ชจ๋ ์๋ธ ๋ฃจํด์ ๋ฐ๊ฒฌํ ๋๊น์ง ์ด๋ฅผ ๊ณ์ ํํฅ(down)์ผ๋ก ๋ฐ๋ณต
๊ทธ ํ์ ์ฝ๋๋ฅผ ์์ฑ
์ด ๋ฐฉ์์์๋ ์์ค์ฝ๋์ ์์กด์ฑ๊ณผ ๋ฐ ํ์ ์์ ์ ์์กด์ฑ์ด Top-down์ผ๋ก ๋์ผํ๋ค๋ ์ ์ด๋ค. ์ฆ, ๋งจ ๋ฐ์ ์๋ ๋ชจ๋์ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด ์์๋ก ๊ณ์ํด์ ๋ณ๊ฒฝ์ด ์ ๋ฐ๋๋ค.
Dependency Inversion
์ปดํ์ผ ํ์์ ์์กด์ฑ์ ์ญ์ ์ํค๋ ๊ฒ์ ๋งํ๋ค.
A(์์ ๋ชจ๋), B(ํ์ ๋ชจ๋) ๊ด๊ณ์ผ ๋,
A์ B ์ฌ์ด์ polymorphic interface๋ฅผ ์ฝ์
A๋ uses interface
B๋ implements the interface
์ด๋ ๊ฒ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด ๋๋๋ค๋ฉด, A๋ B์ ๋ณ๊ฒฝ์ ์ํฅ์ด ์์ผ๋ฉฐ, ์ธํฐํ์ด์ค์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ๊ฒ์ด ์๋ ๊ฒฝ์ฐ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง ์๊ฒ๋์ด ์์กด์ฑ ๊ด๋ฆฌ๊ฐ ๋๋ ๊ฒ์ด๋ค.
Plugins
์์คํ ์ด ์กด์ฌํ ๋ ๋ณ๊ฒฝ๊ฐ๋ฅํ ๋ถ๋ถ๋ค์ ํ๋ฌ๊ทธ์ธ(plugin)์ด๋ผ๊ณ ํ๋ค. ์์คํ ์ด๋ผ๋ ํธ์ถ์๊ฐ ์ด๋ค ํ๋ฌ๊ทธ์ธ์ด ํธ์ถ๋ ์ง๋ ๋ชจ๋ฅด๋ฉฐ, ํ๋ฌ๊ทธ์ธ๋ค์ด ๊ฐ์๋ผ์์ง ์ ์๋ ์ํ๋ฅผ ๋งํ๋ค.
Boundary๋ฅผ Plugin Interface๋ก ๋ค๋ฃฌ๋ค.
์์กด์ฑ ์ญ์ ์ด ์ํํธ์จ์ด ๋ชจ๋ ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ๋ง๋๋ ์๋จ
ํ๋ฌ๊ทธ์ธ ์ํคํ
์ฒ
์์คํ ์ Main Partition/App Partition์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๊ฒฝ๊ณ(Boundary)๋ฅผ ๋๋ ๊ฒ.
App Partition
Main Partition
๊ฐ์ฒด์งํฅ ์ค๊ณ์ ํต์ฌ์ ์์ ๋ ๋ฒจ์ ์ ์ฑ ์ ํ์ ๋ ๋ฒจ์ ์์ธ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ
์์กด์ฑ ์ญ์ (DIP)/ IoC๋ฅผ ํตํด ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์.
์์กด์ฑ ๊ด๋ฆฌ์ ์ง์คํ๋ ๊ฒ์ด ๊ฐ์ฒด์งํฅ์ ํต์ฌ
Last updated
Was this helpful?