DIP
SOLID δΈ DIP
DIP(Dependency Inversion Principle) μ¦, μμ‘΄κ΄κ³ μμ μμΉμ΄λ,
"μΆμνμ μμ‘΄ν΄μΌμ§, ꡬ체νμ μμ‘΄νλ©΄ μ λλ€." λ μμΉμ΄λ€.
κ³ μμ€ λͺ¨λμ μ μμ€ λͺ¨λμ ꡬνμ μμ‘΄ν΄μλ μλλ€.
λμ μ μμ€ λͺ¨λμ΄ κ³ μμ€ λͺ¨λμμ μ μν μΆμ νμ μ μμ‘΄ν΄μΌ νλ€.
κ³ μμ€ λͺ¨λ : μ΄λ€ μλ―Έ μλ λ¨μΌ κΈ°λ₯μ μ 곡νλ λͺ¨λ(interface, μΆμ ν΄λμ€)
μ μμ€ λͺ¨λ : κ³ μμ€ λͺ¨λμ κΈ°λ₯μ ꡬννκΈ° μν΄ νμν νμ μ€μ ꡬν(λ©μΈ ν΄λμ€, κ°μ²΄) DIP : High-level modules should not depend on low-level modules. Both should depend on abstractions. (κ³ μμ€ λͺ¨λμ μ μμ€ λͺ¨λμ μμ‘΄ν΄μλ μλλ€. λλ€ μΆμνμ μμ‘΄ν΄μΌ ν©λλ€.) AND Abstractions should not depend on details. Details should depend on abstractions. (μΆμνλ μΈλΆ μ¬νμ μμ‘΄ν΄μλ μλλ€. μΈλΆμ¬νμ μΆμνμ λ°λΌ λ¬λΌμ§λλ€.)
μ½κ² μ€λͺ νλ©΄, ν΄λΌμ΄μΈνΈμ μμ²μ λ°λ 컨νΈλ‘€λ¬(Cotroller)κ° μκ³ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νλ μλΉμ€(Service)κ° μλ€. 컨νΈλ‘€λ¬(κ³ μμ€)λ μλΉμ€(μ μμ€)λ₯Ό μ§μ μ μΌλ‘ μμ‘΄νμ§ μκ³ μΆμν λ μΈν°νμ΄μ€μ μμ‘΄ν΄μΌ νλ€λ κ²μ΄λ€.
μ΄λ¬ν μ€λͺ μΌλ‘λ§ λ΄€μ λ μ΄ν΄νκΈ° νλ€μκΈ° λλ¬Έμ, μ μ¬μ©νκ³ μ΄λ»κ² μ¬μ©νλμ§μ λν΄μ μμλ΄μΌ νλ€.

λ³΄ν΅ κ³μΈ΅ ꡬ쑰λ μ μ¬μ§κ³Ό κ°μ κ΅¬μ‘°λ‘ λμ΄μλ€.
νν κ³μΈ΅ : μ¬μ©μμ μμ²μ λ°μ μμ© μμμ μ λ¬ν¨κ³Ό λμμ μ²λ¦¬ κ²°κ³Όλ₯Ό μ¬μ©μμκ² νμ
μμ© κ³μΈ΅ : μ¬μ©μμκ² μ 곡ν κΈ°λ₯ ꡬν
λλ©μΈ κ³μΈ΅ : λλ©μΈμ ν΅μ¬ λ‘μ§κ³Ό λͺ¨λΈμ ꡬν
μΈνλΌ κ³μΈ΅ : DB μ°λκ³Ό κ°μ ꡬν κΈ°μ μ λ€λ£¬λ€.
κ° κ³μΈ΅μ μλ‘ λ€λ₯Έ νΉμ§μ κ°μ§κ³ μμΌλ©° μμ κ³μΈ΅μ νμ κ³μΈ΅μκ² μμ‘΄νμ§λ§, νμ κ³μΈ΅μ μμ κ³μΈ΅μ μμ‘΄νμ§ μλλ€. νμ§λ§ κ·Έλ κ² λλ©΄ μΈνλΌ κ³μΈ΅μ μ’ μμ μΈ νμμ΄ λ§μ΄ λ°μνκ² λλ€.
μμ
νλ°° νμ¬λ₯Ό μ ννλ μλΉμ€κ° μμ΅λλ€. μ¬μ©μλ μμ μ΄ μνλ νλ°° νμ¬λ₯Ό μ νν μ μμ΅λλ€.
ν΄λΉ μ½λμλ λ¬Έμ μ μ΄ μ‘΄μ¬ν©λλ€.
λ¨μ ν μ€νΈκ° μ΄λ ΅λ€.
μ μ½λλ Serviceλ§ μ¨μ ν ν μ€νΈ ν μ μλ€. μΈνλΌ κ³μΈ΅μ μνλ Lotteκ° μλ²½νκ² λμν΄μΌ Serviceλ₯Ό ν μ€νΈν μ μλ€.
νμ₯κ³Ό λ³κ²½μ΄ μ΄λ ΅λ€.
λ§μ½ μλ‘μ΄ νμ¬μΈ νμ§(Hanjin)μ΄ μΆκ°λλ€λ©΄ μ΄λ»κ² λ κΉ? νμ¬κ° μΆκ°λ λλ§λ€ κΈ°μ‘΄ Serviceμ μλ‘μ΄ νμ¬λ₯Ό μΆκ°ν΄μΌνλ€.
μ΄λ κ² μΈνλΌ κ³μΈ΅μ΄ νμ₯ λ λλ§λ€ μλΉμ€ μ½λλ₯Ό μμ νλ κ²μ μ’μ§ μμ μ½λλΌκ³ μκΈ°νλ€.
μμμμλ μλΉμ€κ° κ³ μμ€ λͺ¨λμ΄κ³ , νμ¬λ€μ΄ μ μμ€ λͺ¨λμ΄λ€. κ·Έλ κΈ° λλ¬Έμ μμ‘΄ λ°©ν₯μ μλΉμ€μμ νμ¬λ‘ ν₯νλ€. μ¦, κ³ μμ€ λͺ¨λμ΄ μ μμ€ λͺ¨λμ μμ‘΄νκ³ μλ€.
DIPλ₯Ό μ μ©ν΄λ³΄μ.
DIPλ₯Ό μ μ© νκ²λλ©΄ μ μμ€ λͺ¨λμ΄ κ³ μμ€ λͺ¨λμ μμ‘΄ νκ² μμ‘΄ λ°©ν₯μ΄ μμ μ΄ λλ€.
κ·Έλ¬κΈ° μν΄μλ μμμλ μκΈ°ν μΆμ νμ (μΈν°νμ΄μ€, μΆμ ν΄λμ€)κ° νμνλ€.
μ°μ μ μμ€ λͺ¨λμ΄ μμλ°μ μΈν°νμ΄μ€λ₯Ό λ§λ λ€.
μ μμ€ λͺ¨λλ€μ μΈν°νμ΄μ€μ ꡬνμ²΄κ° λλ€.
μ΄μ Serviceλ Company μΈν°νμ΄μ€λ₯Ό μμ‘΄νκ³ μλ‘μ΄ Companyκ° μΆκ°λλ€ νλλΌλ Service λ‘μ§μ λ³κ²½ν νμκ° μλ€.
μ΄λ κ² λ³κ²½ νλλΌλ Runtime flowλ λ³ν¨μ΄ μλ€.

μ¦, μ μμ€ λͺ¨λμ΄ κ³ μμ€ λͺ¨λμ μμ‘΄νκ² λλ κ²μ DIPλΌκ³ νλ€.
Last updated