โ๐พ [CS] DIP์ ์ ์์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ๊ณผ โ์ถ์ํโ์ ๊ฐ๋ ์ ์ฐจ์ด์ .โ
- DIP(Dependency Inversion Principle) ์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ๊ณผ ์ํํธ์จ์ด ๊ณตํ์์ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ โ์ถ์ํโ ๊ฐ๋ ์ ์๋ก ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ๊ฐ๋ ์ด์ง๋ง, ๋ฌธ๋งฅ์ ๋ฐ๋ผ ๊ฐ์กฐ์ ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค.
1๏ธโฃ DIP์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ
- DIP์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ ์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ฒด๊ฐ ์๋ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค๋ฅผ ์ง์นญํฉ๋๋ค.
- ์ด ์์น์ ๋ฐ๋ฅด๋ฉด, ๊ณ ์์ค ๋ชจ๋(๋น์ฆ๋์ค ๋ก์ง)์ ์ ์์ค(์ธ๋ถ์ ์ธ ๊ตฌํ)์ ์์กดํด์ ์ ๋๋ฉฐ, ๋์ ๋ ๋ชจ๋ ๋ชจ๋ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค ๊ฐ์ ์ถ์ํ๋ ๊ฒ์ ์์กดํด์ผ ํฉ๋๋ค.
- ์ด๋ DIP์์ ํต์ฌ์ ์ธ ๊ฐ๋ ์ผ๋ก, ๊ตฌํ์ฒด ๋์ ๊ณ์ฝ(์ธํฐํ์ด์ค)์ ์ํธ์์ฉํ๋๋ก ์ ๋ํฉ๋๋ค.
๐โโ๏ธ DIP์ ์ ์์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ์ด๋ ๋ฌด์์ผ๊น?
๐โโ๏ธ ์ํํธ์จ์ด ๊ณตํ์์์ ๋ชจ๋
๐โโ๏ธ ๋ชจ๋๊ณผ ์ปดํฌ๋ํธ๋ฅผ ๋ ๊ณ ๋ธ๋ก์ ๋น์ ํด๋ณด๋ฉด?!
๐โโ๏ธ ๋น์ฆ๋์ค ๋ก์ง(Business Logic)์ด๋?
์์
// "์ถ์ํ๋ ๊ฒ"์ธ ์ธํฐํ์ด์ค
interface NotificationService {
void sendNotification(String message);
}
- ์์
NotificationService
์ธํฐํ์ด์ค๋ DIP์ ๋ฌธ๋งฅ์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ์ ๋๋ค. - ๊ณ ์์ค ๋ชจ๋๊ณผ ์ ์์ค ๋ชจ๋์ ์ด ์ถ์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ์๋ก ์ํธ์์ฉํฉ๋๋ค.
2๏ธโฃ ์ผ๋ฐ์ ์ธ โ์ถ์ํโ ๊ฐ๋ .
- ์ํํธ์จ์ด ๊ณตํ์์์ โ์ถ์ํโ ๋ ๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ผ๋ก, ์ธ๋ถ์ฌํญ์ ์จ๊ธฐ๊ณ ์ค์ํ ์ ๋ณด๋ง์ ๋๋ฌ๋ด๋ ์ค๊ณ ๊ธฐ๋ฒ์ ์๋ฏธํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ์์คํ ์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ์ค๊ณ๋ ๊ตฌํ์์ ํต์ฌ์ ์ธ ๋ถ๋ถ์ ์ง์คํ ์ ์๊ฒ ํด์ค๋๋ค.
- โ์ถ์ํโ ๋ ํด๋์ค, ์ธํฐํ์ด์ค, ํจ์ ๋ฑ ๋ค์ํ ์์ค์์ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ๋ณต์กํ ์์คํ ์ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- โ์ถ์ํโ ๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฐ์ถ๊ณ , ๊ฐ์ฒด๋ ๋ชจ๋ ๊ฐ์ ์ํธ์์ฉ์ ๊ฐ๋จํ๊ณ ์ผ๊ด๋๊ฒ ๋ง๋ค์ด ์ค๋๋ค.
์์.
abstract class Shape {
abstract void draw();
}
- ์์
Shape
ํด๋์ค๋ ์ผ๋ฐ์ ์ธ ์ถ์ํ์ ์๋ก, ๋ค์ํ ๊ตฌ์ฒด์ ์ธ ๋ํ(์, ์ฌ๊ฐํ ๋ฑ)์ ์ธ๋ถ ๊ตฌํ์ ๊ฐ์ถ๊ณdraw()
๋ผ๋ ๊ณตํต๋ ๋์์ ์ ์ํ ๊ฒ์ ๋๋ค.
3๏ธโฃ ์ฐจ์ด์ .
-
DIP์์์ โ์ถ์ํ๋ ๊ฒโ
- DIP์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ์ ๊ตฌํ์ด ์๋ ๊ณ์ฝ์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ์ด ๊ณ์ฝ์ ์์กดํจ์ผ๋ก์จ ๊ณ ์์ค ๋ชจ๋๊ณผ ์ ์์ค ๋ชจ๋์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฅ๋๋ค.
- ์ฆ, ๊ตฌํ์ด ์๋, ์ถ์์ ์ธ ๊ณ์ฝ์ ์์กดํจ์ผ๋ก์จ ์ ์ฐ์ฑ์ ํ๋ณดํ๊ณ ์์กด์ฑ์ ๋ฐฉํฅ์ ์ญ์ ์ํต๋๋ค.
- DIP์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ์ ๊ตฌํ์ด ์๋ ๊ณ์ฝ์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
-
์ผ๋ฐ์ ์ธ โ์ถ์ํโ
-
์ผ๋ฐ์ ์ธ โ์ถ์ํโ ๋ ๋ ๊ด๋ฒ์ํ ๊ฐ๋
์ผ๋ก, ์์คํ
๋ด์์ ์ธ๋ถ์ฌํญ์ ๊ฐ์ถ๊ณ ๋ณธ์ง์ ์ธ ๊ฐ๋
๋ง ๋๋ฌ๋ด๋ ์ค๊ณ ๊ธฐ๋ฒ์
๋๋ค.
- ์ถ์ ํด๋์ค, ์ธํฐํ์ด์ค๋ฟ๋ง ์๋๋ผ, ๋ณต์กํ ๋ก์ง์ ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ธฐ ์ํ ์ฌ๋ฌ ๊ธฐ๋ฒ์ด ํฌํจ๋ฉ๋๋ค.
-
์ผ๋ฐ์ ์ธ โ์ถ์ํโ ๋ ๋ ๊ด๋ฒ์ํ ๊ฐ๋
์ผ๋ก, ์์คํ
๋ด์์ ์ธ๋ถ์ฌํญ์ ๊ฐ์ถ๊ณ ๋ณธ์ง์ ์ธ ๊ฐ๋
๋ง ๋๋ฌ๋ด๋ ์ค๊ณ ๊ธฐ๋ฒ์
๋๋ค.
4๏ธโฃ ๊ณตํต์
-
๋ ๋ค ์ธ๋ถ ์ฌํญ์ ์จ๊ธด๋ค.
- DIP์์์ โ์ถ์ํ๋ ๊ฒโ๊ณผ ์ผ๋ฐ์ ์ธ โ์ถ์ํโ ๋ชจ๋ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๊ฐ์ถ๊ณ , ๋ ์ค์ํ ๋ถ๋ถ(์ฃผ๋ก ์ธํฐํ์ด์ค๋ ์ํธ์์ฉ)์ ์ง์คํ๋๋ก ์ค๊ณํฉ๋๋ค.
-
์ ์ฐ์ฑ ์ ๊ณต
- ๋ ๊ฐ๋ ๋ชจ๋ ์ฝ๋์ ์ ์ฐ์ฑ์ ์ฆ๊ฐ์ํค๊ณ , ๋ณ๊ฒฝ์ ์ฝ๊ฒ ๋์ํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋๋ฐ ๊ธฐ์ฌํฉ๋๋ค.
5๏ธโฃ ๊ฒฐ๋ก
- DIP์์์ โ์ถ์ํ๋ ๊ฒโ ์ DIP ์์น์ ์ ์ฉํ ๋ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ ๋์ ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค์ ๊ฐ์ ์ถ์์ ๊ณ์ธต์ ์์กดํ๋๋ก ํ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค.
- ์ผ๋ฐ์ ์ธ โ์ถ์ํโ ๋ ์ํํธ์จ์ด ์ค๊ณ์์ ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋์ ๋ฒ์์ ์ค๊ณ ๊ฐ๋ ์ผ๋ก, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ์์น ์ค ํ๋์ ๋๋ค.
๊ฒฐ๊ตญ, DIP์์ ๋งํ๋ โ์ถ์ํ๋ ๊ฒโ์ ์ผ๋ฐ์ ์ธ โ์ถ์ํโ์ ์ธก์ ํ ์ ์ฉ ์ฌ๋ก๋ผ๊ณ ๋ณผ์ ์์ต๋๋ค.
DIP๋ ์ถ์ํ๋ฅผ ํตํด ์์คํ
๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ์ ์ฐ์ฑ์ ๋์ด๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.