μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ(SOLID)+κ°μ²΄μ§ν₯μ€κ³μ μ€νλ§
μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ
solid λ 무μμΈκ°
γ΄ ν΄λ¦°μ½λλ‘ μ λͺ ν λ‘λ²νΈ λ§ν΄μ΄ μ’μ κ°μ²΄ μ§ν₯μ€κ³μ 5κ°μ§λ₯Ό μ 리λ₯Ό νλλ°
μλμ κ°μ΄ μκΈμλ§ λ°μ SOLID λΌκ³ νλ€ .
1. SRP : λ¨μΌ μ± μ μμΉ (single resposibility principle)
2. OCP : κ°λ° -νμ μμΉ (open/closed principle)
3. LSP : 리μ€μ½ν μΉν μμΉ ( Liskov substitution Principle)
4. ISP : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (interface segregation principle)
5. DIP : μμ‘΄κ΄κ³ μμ μμΉ ( Dependency inversion principle)
1. SRP : λ¨μΌ μ± μ μμΉ (single resposibility principle)
ν ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌνλ€.
μ€μν κΈ°μ€μ λ³κ²½μ΄λ€. λ³κ²½μ΄ μμλ νκΈ ν¨κ³Όκ° μ μΌλ©΄ λ¨μΌ μ± μ μμΉμ μ λ°λ₯Έ κ².
ex) UI λ³κ²½, κ°μ²΄μ μμ±κ³Ό μ¬μ©μ λΆλ¦¬
2. OCP : κ°λ° -νμ μμΉ (open/closed principle)
μ λ§ μ€μν μμΉμ΄λ€.
μννΈμ¨μ΄ μμλ νμ₯μλ μ΄λ € μμΌλ λ³κ²½μλ λ«ν μμ΄μΌ νλ€. π€μ₯.. μ΄κ² 무μ¨λ§μ΄μ§?
μ΄λ¬μμΌλ? λ«νμμ΄μΌνλ€..?
λ€νμ±μ λν΄ λ€μ 보μ.
μ¬κΈ°μ νμ₯μ μ΄λ €μκ³ λ³κ²½μ λ«νμλ€ λΌλ μλ―Έλ λ€νμ±μ μλ―Έλ₯Ό μκ°νλ©΄μ μ΄ν΄νλ©΄ λλ€...?...
μΈν°νμ΄μ€κ° μλμ°¨ μ΄μ λ°©λ² μ΄λΌκ³ κ°μ νλ€λ©΄ κ°μκΈ° λ³κ²½λλ€λ©΄ μμ k3 , μλ°ν λ κ°μ μλμ°¨ μ΄μ μ μμ΄ μν₯μ λ―ΈμΉ μ μλ€...?....π κ·ΈμΉλ§ μ½λ μμ ..λ³κ²½...μ ν΄μΌλμ§ μμκΉ..?
λΆλͺ λ€νμ±μ μ¬μ©νμ§λ§ OCPμμΉμ μ§ν¬ μ μλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ°μν΄μλ κ°μ²΄λ₯Ό μμ±νκ³ , μ°κ΄κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ λ³λμ 쑰립, μ€μ μκ° νμνλ€κ³ νλ€.π£π€
<μΌλ¨ λμ€μ μ΄ λΆλΆμλν΄ μΆκ° μ€λͺ ν κΈμ μ¬λ €μΌκ² λ€. μΌλ¨ PASS>
3. LSP : 리μ€μ½ν μΉν μμΉ ( Liskov substitution Principle)
νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€.
μλμ°¨ μΈν°νμ΄μ€μ μμ μ μμΌλ‘ κ°λΌλ κΈ°λ₯μ΄λ€.
κ·Έλ°λ° λ§μ½ μμ μ λ°μΌλ©΄ λ€λ‘κ°κ² λλ€λ©΄..리μ€μ½ν μΉνμμΉμ μλ°°νκ² λλ€.λλ¦¬κ² κ°λλΌλ μμΌλ‘ κ°μΌνλ€λ κ²μ΄ 리μ€μ½ν μΉν μμΉμ΄λ€.
4. ISP : μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (interface segregation principle)
νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€.
μλμ°¨λΌλ μΈν°νμ΄μ€κ° μλ€λ©΄ ,,
(1)μ΄μ μΈν°νμ΄μ€ , (2)μ λΉ μΈν°νμ΄μ€ λ‘ λΆλ¦¬ ν΄λ³΄μ
μλμ°¨ μΈν°νμ΄μ€ λ λ무 ν¬κΈ° λλ¬Έμ μμ κ°μ΄ λΆλ¦¬νλ€.
κ·Έλ¬λ©΄ μ¬μ©μ ν΄λΌμ΄μΈνΈλ (1)μ΄μ μ ν΄λΌμ΄μΈνΈ (2) μ λΉμ¬ ν΄λΌμ΄μΈνΈ λ‘ κ΅¬λΆν μ μλ€.
5. DIP : μμ‘΄κ΄κ³ μμ μμΉ ( Dependency inversion principle)
νλ‘κ·Έλλ¨Έλ μΆμνμ μμ‘΄ν΄μΌμ§, ꡬ체νμ μμ‘΄νλ©΄ μλλ€. // μμ‘΄μ± μ£Όμ μ μ΄ μμΉμ λ°λ₯΄λ λ°©λ²μ€ νλμ΄λ€.
=> ꡬν ν΄λμ€μ μμ‘΄νμ§ λ§κ³ , μΈν°νμ΄μ€μ μμ‘΄νλΌλ λ»μ΄λ€.
λ€μ μ κ·Έλ¦Όμ κ°μ§κ³ μ€λͺ νμλ©΄ μ΄μ μλ μλμ°¨μ μν μ λν΄μλ§ μμμΌνλ€λ κ²μ΄λ€.
μ΄μ μκ° k3 , μλ°λΌμ λν΄ μ νμκ° μλ€.
μ¬κΈ°μ MemberService λ MemberRepository λ§ μλ κ²μ΄ μλλΌ MemorymemberRepository κΉμ§ μλκ²μ΄λ€.
κ·Έλμ MemoryMemberRepositoryλ₯Ό λ΄κ±Έλ‘ λ°κΎΈλ €κ³ ν λ μ½λλ₯Ό λ³κ²½ν΄μΌνλ€.
π€ DIP μλ°..?? νΌλμ€λ½λ€..π£π£
DIPλ₯Ό λ§μ‘±νκΈ° μν΄μλ MemberService κ° MemberRepository μΈν°νμ΄μ€μλ§ μμ‘΄νλλ‘ ν΄λμ€λ₯Ό μ€κ³ν΄μΌνλλ°..
μ΄ ν΄κ²° λ°©λ²μ <λ€μ κΈμ μ 리>
μ 리:
- κ°μ²΄ μ§ν₯μ ν΅μ¬μ λ€νμ±
- λ€νμ± λ§μΌλ‘λ μ½κ² λΆνμ κ°μ λΌμ°λ―μ΄ κ°λ°ν μ μλ€.
- λ€νμ± λ§μΌλ‘λ ꡬν κ°μ²΄λ₯Ό λ³κ²½ν λ ν΄λΌμ΄μΈνΈ μ½λλ ν¨κ» λ³κ²½λλ€.
- λ€νμ± λ§μΌλ‘λ OCP DIPλ₯Ό μ§ν¬ μ μλ€. ===> λκ° λ νμν¨!!
κ°μ²΄ μ§ν₯ μ€κ³μ μ€νλ§
μλ μλ κ°λ°μλ€μ΄ μ’μ κ°μ²΄ μ§ν₯ κ°λ°μ νκΈ°μν΄ OCP(κ°λ°-νμ), DIP(μμ‘΄κ΄κ² μμ )μμΉμ μ§ν€λ©΄μ κ°λ°μ ν΄λ³΄λ λ무 ν μΌμ΄ λ§μλ€. ===> κ·Έλμ νλ μμν¬λ‘ λ§λ€μ΄λ²λ Έλ€.
μ°λ¦¬κ° μ§μ μμνκ² JAVA λ‘ OCP,DIP μμΉλ€μ μ§ν€λ©΄μ κ°λ°μ ν΄λ³΄λ©΄ κ²°κ΅μλ μ€νλ§ νλ μμν¬λ₯Ό λ§λ€κ² λλ€.
(==DI 컨ν μ΄λ) //
μ 리
1. λͺ¨λ μ€κ³μ μν κ³Ό ꡬνμ λΆλ¦¬
2. μμ μ 리ν κΈμμ μλμ°¨, 곡μ°μ λΉμ λ‘ νλκ²μ λ μ¬λ €λ³΄μ.
μ ν리μΌμ΄μ μ€κ³λ 곡μ°μ μ€κ³νλ―μ΄ λ°°μλ§ λ§λ€μ΄λκ³ , λ°°μ°λ μΈμ λ μ§ μ μ°νκ² λ³κ²½ν μ μλλ‘ λ§λλκ²μ΄ μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ΄λ€.
3. μ΄μμ μΌλ‘λ λͺ¨λ μ€κ³μ μΈν°νμ΄μ€λ₯Ό λΆμ¬νμ
μ€λ¬΄ κ³ λ―Ό
-> μΈν°νμ΄μ€λ₯Ό λμ νλ©΄ μΆμνλΌλ λΉμ©μ΄ λ°μνλ€. // μΆμνκ° λλ©΄ λ€μ μ½λλ₯Ό λ€μ¬λ€ 보μμΌ ν¨.
-> κΈ°λ₯μ νμ₯ν κ°λ₯μ±μ΄ μλ€λ©΄, ꡬ체 ν΄λμ€λ₯Ό μ§μ μ¬μ©νκ³ , ν₯ν κΌ νμν λ 리ν©ν°λ§ν΄μ μΈν°νμ΄μ€λ₯Ό λμ νλκ²λ λ°©λ²μ΄λ€.