Intro::
๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ๋ค์ฏ๊ฐ์ง ๊ธฐ๋ณธ ์์น์ธ SOLID์ ๋ํด ์์๋ด ์๋ค.
ย
SOLID ๋?
์ํํธ์จ์ด๋ฅผ ๋ณด๋ค ์ ์ฐํ๊ณ , ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๋ฐ ๋ชฉ์ ์ ๋ก๋๋ค.
ย
Single Responsibility Principle (๋จ์ผ ์ฑ ์ ์์น, SRP)
ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ ธ์ผ ํ๋ค.
- ์ค๋ช : ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ ์ด์ ๊ฐ ํ๋๋ง ์กด์ฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด ์์น์ ๋ฐ๋ฅด๋ฉด, ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ์ํฅ ์์ด ํด๋น ํด๋์ค๋ฅผ ์์ ํ๊ฑฐ๋ ํ์ฅํ ์ ์์ด ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋๋ค.
- ์์: ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋
User
ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํฉ์๋ค. ์ด ํด๋์ค๊ฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ , ๋ํ ์ฌ์ฉ์ ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ฅผ ํฌํจํ๊ณ ์๋ค๋ฉด, ์ด ํด๋์ค๋ ๋ ๊ฐ์ง ์ฑ ์์ ์ง๋๊ฒ ๋ฉ๋๋ค. SRP์ ๋ฐ๋ผ, ์ฌ์ฉ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์ฌ์ฉ์ ์ธ์ฆ์ ์๋ก ๋ค๋ฅธ ํด๋์ค์์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด,UserManager
ํด๋์ค๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ,AuthenticationService
ํด๋์ค๋ ์ฌ์ฉ์ ์ธ์ฆ์ ๋ด๋นํฉ๋๋ค.
Open/Closed Principle (๊ฐ๋ฐฉ-ํ์ ์์น, OCP)
์ํํธ์จ์ด ์ํฐํฐ(ํด๋์ค, ๋ชจ๋, ํจ์ ๋ฑ)๋ ํ์ฅ์๋ ์ด๋ ค ์์ด์ผ ํ์ง๋ง ๋ณ๊ฒฝ์๋ ๋ซํ ์์ด์ผ ํ๋ค.
- ์ค๋ช : ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์์คํ ์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ๊ฑฐ๋ ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฑ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ด ์์น์ ์ค์ํ๋ฉด ๊ธฐ์กด ์ฝ๋์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์์คํ ์ ๊ฐ์ ํ๊ฑฐ๋ ํ์ฅํ ์ ์์ต๋๋ค.
- ์์: ์ผํ ์นดํธ์์ ํ ์ธ ์ ์ฑ
์ ์ ์ฉํ๋ ์์คํ
์ ๊ฐ๋ฐํ๋ค๊ณ ์๊ฐํด๋ด
์๋ค. ์ฌ๋ฌ ์ข
๋ฅ์ ํ ์ธ(ํ์ ํ ์ธ, VIP ํ ์ธ ๋ฑ)์ ์ ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค. OCP์ ๋ฐ๋ผ, ๊ธฐ์กด์ ํ ์ธ ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ ์๋ก์ด ํ ์ธ ๋ก์ง์ ์ถ๊ฐํ ์ ์๋๋ก
Discount
์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ ๊ฐ ํ ์ธ ์ ์ฑ ์Discount
๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ก ๋ง๋ญ๋๋ค. ์ ํ ์ธ ์ ์ฑ ์ ์ถ๊ฐํ ๋๋ ๋จ์ํDiscount
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์ ํด๋์ค๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
Liskov Substitution Principle (๋ฆฌ์ค์ฝํ ์นํ ์์น, LSP)
ํ๋ก๊ทธ๋จ์์ ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค ๋์ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
- ์ค๋ช : ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํํ ์ ์์ด์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ถ๋ชจ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ ํด๋์ค์ ์ธ์คํด์ค๋ก ๋์ฒดํด๋ ํ๋ก๊ทธ๋จ์ ์ ํ์ฑ์ด ์ ์ง๋์ด์ผ ํฉ๋๋ค. ์ฆ, ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๊ณ์ฝ์ ์ค์ํด์ผ ํฉ๋๋ค.
- ์์:
Bird
ํด๋์ค๊ฐ ์๊ณ , ์ด ํด๋์ค์์ ํ์๋Duck
๊ณผOstrich
๋ ํ์ ํด๋์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ๋ชจ๋Bird
๋ ๋ ์ ์๋ค๋ ๋ฉ์๋(fly
)๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ ๋,Ostrich
๋ ์ค์ ๋ก ๋ ์ ์์ผ๋ฏ๋ก ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. LSP์ ์๋ฐฐ๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ์ ์๋ ์์ ๋ ์ ์๋ ์๋ฅผ ๊ตฌ๋ถํ๋ ๋ ๋ช ํํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,FlyingBird
์NonFlyingBird
๋ ๊ฐ์ ํด๋์ค๋ฅผ ๋์ ํ๊ณ , ๊ฐ๊ฐ์ ์ ํฉํ ํ๋์ ์ ์ํฉ๋๋ค.
Interface Segregation Principle (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น, ISP)
ํด๋ผ์ด์ธํธ๋ ์์ ์ด ์ด์ฉํ์ง ์๋ ์ธํฐํ์ด์ค์ ์์กดํ์ง ์์์ผ ํ๋ค.
- ์ค๋ช : ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค๋, ๋ช ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๊ฐ ๋ ๋ซ๋ค๋ ์์น์ ๋๋ค. ์ด๋ ์ธํฐํ์ด์ค๋ฅผ ์๊ณ , ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ์ ์งํ์ฌ, ํด๋ผ์ด์ธํธ๊ฐ ํ์ํ์ง ์์ ๋ฉ์๋์ ์์กดํ์ง ์๋๋ก ํฉ๋๋ค.
- ์์: ์ฌ๋ฌ ์ข
๋ฅ์ ํ๋ฆฐํฐ๋ฅผ ์ํ ์ธํฐํ์ด์ค
Printer
๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ด ์ธํฐํ์ด์ค์๋print
,scan
,fax
๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค. ํ์ง๋ง ์ผ๋ถ ํ๋ฆฐํฐ๋ ๋จ์ํ ๋ฌธ์๋ฅผ ์ถ๋ ฅ๋ง ํ ๋ฟ, ์ค์บ์ด๋ ํฉ์ค ๊ธฐ๋ฅ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ISP์ ๋ฐ๋ผ,Printer
์ธํฐํ์ด์ค๋ฅผDocumentPrinter
,Scanner
,Fax
์ ๊ฐ์ด ๋ถ๋ฆฌํ์ฌ ๊ฐ ๊ธฐ๋ฅ์ ํ์๋ก ํ๋ ์ฅ์น๋ง ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฒ ํ ์ ์์ต๋๋ค.
Dependency Inversion Principle (์์กด์ฑ ์ญ์ ์์น, DIP)
๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋๋ฉฐ, ๋ ๋ชจ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
- ์ค๋ช : ์ผ๋ฐ์ ์ผ๋ก ์ ์์ค ๋ชจ๋(๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ ํฌํจํ๋ ๋ชจ๋)์ ๊ณ ์์ค ๋ชจ๋(๋ณด๋ค ์ถ์์ ์ธ ์ ์ฑ ์ด๋ ๊ธฐ๋ฅ์ ์ ์ํ๋ ๋ชจ๋)์ ์์กดํฉ๋๋ค. ์์กด์ฑ ์ญ์ ์์น์ ์ด ๊ด๊ณ๋ฅผ ์ญ์ ์์ผ, ๋ ๋ชจ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํ๋๋ก ํจ์ผ๋ก์จ, ๊ณ ์์ค ๋ชจ๋์ด ์ ์์ค ๋ชจ๋์ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ๋ ๋ฆฝ์ ์ด๊ฒ ๋ง๋ญ๋๋ค.
- ์์: ๋ด์ค ๊ธฐ์ฌ๋ฅผ ๋ค์ํ ๋ฐฉ๋ฒ(์ด๋ฉ์ผ, SMS, ์ฑ ๋
ธํฐํผ์ผ์ด์
)์ผ๋ก ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ค๊ณ ์๊ฐํด ๋ด
์๋ค.
NewsService
ํด๋์ค๊ฐ ์ด๋ฉ์ผ์ ๋ณด๋ด๋EmailNotification
ํด๋์ค์ ์ง์ ์์กดํ๊ณ ์๋ค๋ฉด, ์ถํ์ SMS๋ ์ฑ ๋ ธํฐํผ์ผ์ด์ ์ ์ถ๊ฐํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. DIP๋ฅผ ์ ์ฉํ์ฌNotification
์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๊ณEmailNotification
,SMSNotification
,AppNotification
์ด ์ด๋ฅผ ๊ตฌํํ๋๋ก ํจ์ผ๋ก์จ,NewsService
๋ ๊ตฌ์ฒด์ ์ธ ์๋ฆผ ๋ฐฉ๋ฒ์ ๋ํด ์ ํ์ ์์ดNotification
์ธํฐํ์ด์ค์๋ง ์์กดํ๊ฒ ํ ์ ์์ต๋๋ค.
ย
Loading Comments...