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...