SOLID
ํด๋ฆฐ์ฝ๋๋ก ์ ๋ช ํ ๋ก๋ฒํธ ๋งํด์ด ์ ์ํ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น
SRP: ๋จ์ผ ์ฑ
์ ์์น(Single Responsibility Principle)
ํ๋์ ํด๋์ค๋ ํ๋์ ์ฑ ์(๋ชฉ์ )๋ง ๊ฐ์ ธ์ผ ํ๋ค.
์ฑ ์์ ํด ์๋ ์๊ณ , ์์ ์๋ ์์ผ๋ฉฐ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๊ฐ ํ๋์ ์ด์ ์ฌ์ผ ํ๋ค.
๋ณ๊ฒฝ์ ์ฉ์ดํ๊ฒ ์ค๊ณํ๋ค๋ฉด ๋จ์ผ ์ฑ ์ ์์น์ ์ ๋ฐ๋ฅธ ๊ฒ
Order ํด๋์ค๋ ์ฃผ๋ฌธ์ ๊ด๋ จ๋ ์ฑ ์๋ง ๊ฐ์ง๊ณ ์๊ณ , Item ํด๋์ค๋ ์์ดํ ์ ๊ด๋ จ๋ ์ฑ ์๋ง ๊ฐ์ง๊ณ ์๋ค.
OCP: ๊ฐ๋ฐฉ-ํ์ ์์น (Open-Closed principle)
ํ์ฅ์ ์ด๋ ค์์ผ๋, ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค.
์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ํ์ฅํ ์ ์๋๋ก ์ค๊ณํด์ผ ํ๋ค.
์ ์ฝ๋์์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด์๋ Shape ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
LSP: ๋ฆฌ์ค์ฝํ ์นํ ์์น (Liskov Substitution Principle)
๊ฐ์ฒด๋ ์ ํ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ์์ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ํ์ ํด๋์ค๋ก ๋์ฒด ๊ฐ๋ฅํด์ผ ํ๋ค.
๋ถ๋ชจ ํด๋์ค์ ๊ท์ ์ ์์ ํด๋์ค๊ฐ ๋ค ์ง์ผ์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ ์ฝ๋์์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์ง๋ง ๋์ด๋ฅผ ๊ตฌํ๋๋ฐ์ ๋ ผ๋ฆฌ์ ์ธ ์ฐจ์ด๊ฐ ์์ด ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋ค.
ISP: ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น (Interface segregation principle)
์ฌ๋ฌ ๊ธฐ๋ฅ์ ํฌํจํ ๋ฒ์ฉ ์ธํฐํ์ด์ค ๋ณด๋จ ํน์ ํด๋ผ์ด์ธํธ๋ฅผ ์ํ ์ธํฐํ์ด์ค ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
์ธํฐํ์ด์ค๊ฐ ๋ช ํํด์ง๋ฉฐ ๋์ฒด ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฌ ๊ฐ๋ก ๋ถ๋ฆฌํ์ฌ ํด๋์ค์ ํ์ํ ์ธํฐํ์ด์ค๋ง ๊ตฌํํ๋๋ก ํ๋ฉด, ํ์ํ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ ์ ์๊ณ , ๋์ฒด ๊ฐ๋ฅ์ฑ๋ ๋์์ง๋ค. ๋ํ ๋ถํ์ํ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ง ์์๋ ๋๊ณ , ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ถํ์ํ ๋ฉ์๋๋ฅผ ๋ ธ์ถ์ํค์ง ์๋ ์ฅ์ ์ด ์๋ค.
DIP: ์์กด ์ญ์ ์์น (Dependency inversion principle)
"์ถ์ํ์ ์์กดํด์ผํ๊ณ , ๊ตฌ์ฒดํ์ ์์กดํ๋ฉด ์๋๋ค."๋ฅผ ๋ฐ๋ฅด๋ ์์น
๊ตฌํ ํด๋์ค์ ์์กดํ์ง ์๊ณ , ์ธํฐํ์ด์ค์ ์์กดํด์ผ ํ๋ค.
๊ตฌํ์ฒด์ ์์กดํ๊ฒ ๋๋ฉด ๋ณ๊ฒฝ์ด ์ด๋ ค์์ง๊ณ , ํ ์คํธ๋ ์ด๋ ค์์ง๋ค.
์ ์ฝ๋๋ ์ธํฐํ์ด์ค์ ์กด์ฌ๋ก OrderService -> PaymentProvider <- KakaoPaymentProvider
๋ก ์์กด ๋ฐฉํฅ์ด ์ญ์ ๋์๊ธฐ ๋๋ฌธ์, ๋ณ๊ฒฝ์ด ์ฉ์ดํด์ง ์ฝ๋๊ฐ ๋๋ค.
ํ์ง๋ง ์ธํฐํ์ด์ค๊ฐ ์์๋ค๋ฉด OrderService -> KakaoPaymentProvider
๋ก ์์กดํ๊ฒ ๋์ด ๋ณ๊ฒฝ์ด ์ด๋ ค์์ง๊ณ , ํ
์คํธ๋ ์ด๋ ต๊ฒ ๋๋ค.
Last updated