Search
moon
sun
๐Ÿ“

DIP : The Dependency Inversion Principle

Category
as S/W ์—”์ง€๋‹ˆ์–ด
Tags
SOLID
Architecture
S/W Engineering
๋ณด๋“ค๋ ˆ๋ฅด
Study Note
Created time
2009/04/15

Definition

โ€ข
์ƒ์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์ด ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ์— ์˜์กดํ•˜์ง€ ๋ง๋„๋ก, ์ด๋“ค ๋‘ ๋ชจ๋“ˆ ๋ชจ๋‘ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋„๋ก
โ€ข
์ถ”์ƒํ™”๋Š” ๊ตฌ์ฒด์ ์ด ์‚ฌํ•ญ์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก
โ€ข
inversion์ด๋ž€ ์–ดํœ˜๋Š” ๊ตฌ์กฐ์  ๋ถ„์„ ์„ค๊ณ„ ๋“ฑ์˜ ์ „ํ†ต์  ๋ฐฉ๋ฒ•์—์„œ ์ •์ฑ…์ด ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์— ์˜์กดํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์–ด, ์ด๋“ค ์˜์กด ๊ด€๊ณ„๋ฅผ ์—ญ์ „(inversion) ์‹œํ‚จ๋‹ค๋Š” ๋œป
โ€ข
์ƒ์œ„์ˆ˜์ค€ ๋ชจ๋“ˆ์ด๋ž€ : ์˜๋ฏธ๋ก  ์ƒ ํƒ€ ๋ชจ๋“ˆ์˜ action์— ์ •์ฑ…์„ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ๋กœ์„œ, ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์˜ ํ•ต์‹ฌ์„ ์ด๋ฃจ๋Š” ๋ชจ๋“ˆ. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜์œ„ ์ˆ˜์ค€ ๋ชจ๋“ˆ์— ๋น„ํ•ด ๋ณ€ํ™” ์ •๋„๊ฐ€ ์ ์Œ.

DIP violated sample

โ€ข
Utility -> Mechanism -> Policy ๋ฐฉํ–ฅ์œผ๋กœ ์ˆ˜์ค€์ด ๋†’์•„์ง์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ํ•˜์œ„ ์ˆ˜์ค€์˜ ๋ชจ๋“ˆ ๋ฐฉํ–ฅ์œผ๋กœ dependency๊ฐ€ ๊ฑธ๋ฆฌ๊ณ  ์žˆ์Œ.
โ€ข
๊ฒŒ๋‹ค๊ฐ€ ์˜์กด์„ฑ์€ ์ดํ–‰์„ฑ(transitivity)๋ฅผ ๋„๋ฏ€๋กœ, policy ๊ณ„์ธต์€ mechanism ๋ฟ ์•„๋‹ˆ๋ผ utility ๊ณ„์ธต์—๋„ ์˜์กด์„ฑ์„ ๊ฐ€์ง.

DIP complied sample

โ€ข
์ƒ์œ„ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ž์‹ ์ด ํ•„์š”ํ•œ ํ•˜์œ„ ์ˆ˜์ค€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ •์˜(์ถ”์ƒ๋ฌผ)์„ ๊ทธ ์ž์‹ ์˜ ๊ณ„์ธต์— ์ •์˜ํ•˜๊ณ , ํ•ด๋‹น ์ •์˜๋ฅผ ์ฐธ์กฐ(์˜์กด์„ฑ์˜ ์ œ๊ฑฐ)
โ€ข
ํ•˜์œ„ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ƒ์œ„ ์ˆ˜์ค€ ๊ณ„์ธต์— ์ •์˜๋œ ์„œ๋น„์Šค๋ฅผ ์ƒ์†์„ ํ†ตํ•ด ๊ตฌํ˜„๋ฌผ์„ ์ œ๊ณต(์ƒ์œ„ ์ˆ˜์ค€์˜ ์ถ”์ƒ๋ฌผ์— ๋Œ€ํ•œ ์ƒ์†์„ ํ†ตํ•œ ์˜์กด์„ฑ์˜ ์—ญ์ „)

Conclusion

โ€ข
Framework design์—์„œ ๋ณธ ์›์น™์˜ ์ ์ ˆํ•œ ์‘์šฉ์ด ํ•„์ˆ˜ : DI(Dependency Injection; ์˜์กด์„ฑ์ด ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”๋œ ์ดํ›„์—์•ผ ๊ฑธ๋ฆผ)
โ€ข
TDD๋ฅผ ์ด๋ฃจ๊ธฐ์— ๋งค์šฐ ์šฉ์ด. Ex. Policy layer๋Š” ํƒ€ layer์˜ ๋„์›€ ์—†์ด๋„ ์ธ์Šคํ„ด์Šคํ™”๊ฐ€ ๊ฐ€๋Šฅ.