#architecture #study #clean_architecture
π 2023.10.18
π 4λΆ μ»΄ν¬λνΈ μμΉ: 12μ₯ ~ 14μ₯. p.97 ~ p.138
μ»΄ν¬λνΈλ μμ€ν μ κ΅¬μ± μμλ‘ λ°°ν¬ν μ μλ κ°μ₯ μμ λ¨μ.
μ΄ν리μΌμ΄μ μ κ·λͺ¨κ° μ±μ₯νλ©΄μ, μ΄ν리μΌμ΄μ μ½λ λ° κ΄λ ¨ μ’ μμ± μ½λλ₯Ό λͺ¨λ ν κ³³μ λ£λ μ’ λμ λ°©μμΌλ‘λ κ³μν΄μ λ©λͺ¨λ¦¬ 곡κ°μ μ°¨μ§νκ² λμκ³ μ΄λ λ©λͺ¨λ¦¬ 곡κ°μ λ¨νΈνλ₯Ό μ΄λνλ€.
μ΄λ¬ν λ¨νΈνλ₯Ό ν΄κ²°νκΈ° μν΄ μ¬λ°°μΉκ° κ°λ₯ν λ°μ΄λ리
κ° νλ λμλ€.
μ»΄νμΌλ¬λ μ¬λ°°μΉκ° κ°λ₯ν λ°μ΄λ리 μμ ν¨μ μ΄λ¦μ λ©ν λ°μ΄ν° ννλ‘ μμ±νλλ‘ μμ λ¨.
μΈλΆ μ°Έμ‘°
λ‘ μμ±μΈλΆ μ μ
λ‘ μμ±λ§νΉ λ‘λ
λ§νΉ λ‘λμ λ±μ₯
λλ €μ§ λ§νΉ λ‘λλ₯Ό ν΄κ²°νκ³ μ μν μ΄ 2κ°λ‘ λΆλ¦¬ λ¨
μ΄λ κ² λλμ΄λ νλ‘κ·Έλ¨μ΄ 컀μ§λ©΄μ 물리μ μΌλ‘ λλ¦° μ₯μΉλ₯Ό μ΄μ©νλ νκ³λ₯Ό λμ΄μμ§ λͺ» νλ€...!
무μ΄μ λ²μΉ
μ΄ λ±μ₯ν¨.
μ»΄ν¬λνΈ νλ¬κ·ΈμΈ μν€ν
μ³
κ° νμμ΄λ€ ν΄λμ€λ₯Ό μ΄λ μ»΄ν¬λνΈμ ν¬ν¨μμΌμΌ ν κΉ?
REP(Reuse/Release Equivalence Principle): μ¬μ¬μ©/λ¦΄λ¦¬μ€ λ±κ° μμΉ
μ¬μ¬μ© λ¨μλ λ¦΄λ¦¬μ€ λ¨μμ κ°λ€
- λ¨μΌ μ»΄ν¬λνΈλ μμ§μ± λμ ν΄λμ€μ λͺ¨λλ€λ‘ ꡬμ±λμ΄μΌ ν¨
- μ»΄ν¬λνΈλ₯Ό ꡬμ±νλ λͺ¨λ λͺ¨λμ μλ‘ κ³΅μ νλ μ€μν ν λ§λ λͺ©μ μ΄ μμ΄μΌ ν¨
CCP(Common Closure Principle): κ³΅ν΅ νμ μμΉ
λμΌν μ΄μ λ‘ λμΌν μμ μ λ³κ²½λλ ν΄λμ€λ₯Ό κ°μ μ»΄ν¬λνΈλ‘ λ¬Άμ΄λΌ.
μλ‘ λ€λ₯Έ μμ μ λ€λ₯Έ μ΄μ λ‘ λ³κ²½λλ ν΄λμ€λ λ€λ¦ μ»΄ν¬λνΈλ‘ λΆλ¦¬νλΌ.
- SRP(λ¨μΌ μ± μ μμΉ)λ₯Ό μ»΄ν¬λνΈ κ΄μ μμ λ°λΌλ³Έ λ΄μ©
- λ¨μΌ μ»΄ν¬λνΈλ λ³κ²½μ μ΄μ κ° μ¬λ¬ κ° μμ΄μλ μ λ¨
- λλΆλΆ
μ μ§ λ³΄μμ±
>μ¬μ¬μ©μ±
- λ³κ²½μ΄ λ°μνλ€λ©΄, λ³κ²½ λͺ¨λκ° λ¨μΌ μ»΄ν¬λνΈμμ λ°μνλ κ²μ΄ λ«λ€
- λ³κ²½λ μ»΄ν¬λνΈλ§ μ¬λ°°ν¬ νλ©΄ λκΈ° λλ¬Έ- λ³κ²½λ κ°λ₯μ±μ΄ μλ ν΄λμ€λ λͺ¨λ νκ³³μΌλ‘ λ¬Άμ κ²μ κΆν¨
- OCP(κ°λ°©-νμ μμΉ) μλ λΉμ·ν¨ - ν΄λμ€κ° λ³κ²½μλ λ«ν μκ³ νμ₯μλ μ΄λ € μμ΄μΌ ν¨
- 100% νμλ λΆκ°λνλ―λ‘ μ λ΅μ μΌλ‘ νμ
- λμΌν μ νμ λ³κ²½μ λν΄ λ«ν μλ ν΄λμ€λ€μ νλμ μ»΄ν¬λνΈλ‘ λ¬Άμ
- OCPλ₯Ό νλ μ μ©
CRP(Common Reuse Principle): κ³΅ν΅ μ¬μ¬μ© μμΉ
μ»΄ν¬λνΈ μ¬μ©μλ€μ νμνμ§ μλ κ²μ μμ‘΄νκ² κ°μνμ§ λ§λΌ.
- ν΄λμ€μ λͺ¨λμ μ΄λ μ»΄ν¬λνΈμ μμΉμν¬μ§ κ²°μ ν λ λμμ΄ λλ μμΉ
- κ°μ΄ μ¬μ¬μ©λλ κ²½ν₯μ΄ μλ ν΄λμ€μ λͺ¨λλ€μ κ°μ μ»΄ν¬λνΈμ ν¬ν¨ν΄μΌ νλ€
- λμΌν μ»΄ν¬λνΈλ‘ λ¬Άμ΄μλ μλλ ν΄λμ€κ° 무μμΈμ§λ μκ°ν΄μΌ ν¨
- μ΄λ€ μ»΄ν¬λνΈκ° λ€λ₯Έ μ»΄ν¬λνΈλ₯Ό μ¬μ©νλ©΄ μμ‘΄μ±μ΄ λ°μ ν¨
- μμ‘΄νλ μ»΄ν¬λνΈκ° μλ€λ©΄ ν΄λΉ μ»΄ν¬λνΈμ λͺ¨λ ν΄λμ€μ λν΄ μμ’ν¨μ νμ€ν μΈμ§ν΄μΌ ν¨- CRPλ ISP(μΈν°νμ΄μ€ λΆλ¦¬ μμΉ)μ ν¬κ΄μ μΈ λ²μ
- μ¦,νμνμ§ μλ κ²μ μμ‘΄νμ§ λ§λΌ
REP: μ¬μ¬μ©μ±μ μν κ·Έλ£Ή
CCP: μ μ§λ³΄μμ±μ μν κ·Έλ£Ή
CRP: λΆνμν 릴리μ€λ₯Ό νΌνκΈ° μν΄ λΆλ¦¬
μκ°μ΄ νλ¦μ λ°λΌ νλ‘μ νΈμ μ΄μ μ΄ κ°λ° κ°λ₯μ±μμ μ¬μ¬μ©μ±μΌλ‘ λ°λκ³ , κ·Έμ λ°λ₯Έ μ»΄ν¬λνΈ κ΅¬μ±νλ λ°©μμλ λ³νκ° λ°μνλ€.
ADP(Acyclic Dependencies Principle): μμ‘΄μ± λΉμν μμΉ
μ»΄ν¬λνΈ μμ‘΄μ± κ·Έλνμ μνμ΄ μμ΄μλ μλλ€
- μ£Ό λ¨μ λΉλ
- ν λ¨μμμ κ°λ°μ 5μΌ μ€ 4μΌ μ§ννκ³ 1μΌμ κ°μκ° μ§νν μμ μ ν΅ν©νλ λ°©μ
- νλ‘μ νΈ λ¨μκ° μ»€μ§λ©΄μ ν΅ν©μ μν λ§λν μκ°μ΄ λ€κΈ° μμν¨
- ν΅ν© ν μ€νΈλ₯Ό μννκΈ° μ΄λ €μ μ§κ³ , λΉ λ₯Έ νΌλλ°±μ΄ μ£Όλ μ₯μ μ μ μ μκ² λ¨- μν μμ‘΄μ± μ κ±°νκΈ°
- μ΄λ¬ν λ¬Έμ λ₯Ό μ΄λ»κ² ν΄κ²°ν κΉ?
- κ°λ° νκ²½μ 릴리μ€κ° κ°λ₯ν μ»΄ν¬λνΈ λ¨μλ‘ λΆλ¦¬νλ κ²
- νΉμ μ»΄ν¬λνΈκ° λ³κ²½λλλΌλ λ€λ₯Έ νμ μν₯μ μ£Όμ§ μλλ‘ μμ λ¨μλ₯Ό λΆλ¦¬ν¨
- ν νμμ μ»΄ν¬λνΈκ° 릴리μ¦κ° λλ©΄, μ°λ¦¬νμ μ΄λ₯Ό μ¬μ©ν μ§? κΈ°μ‘΄ λ²μ μ μ¬μ©νκ³ μΆνμ μ λ°μ΄νΈλ₯Ό ν μ§ κ²°μ νμ¬ μμ μ μ§νν μ μλ€
- μ΄λ¬ν μμ μ΄ μ±κ³΅νλ €λ©΄, μ»΄ν¬λνΈ μ¬μ΄μ μμ‘΄μ± κ΅¬μ‘°λ₯Ό λ°λμ κ΄λ¦¬ν΄μΌ ν¨
- λΉ μνν λ°©ν₯ κ·Έλν- μν λκΈ°
- DIP(μμ‘΄μ± μμ μμΉ)μ μ μ©
- λͺ¨λ μμ‘΄νλ μλ‘μ΄ μ»΄ν¬λνΈλ₯Ό λ§λ€κ³ , κ° μ»΄ν¬λνΈκ° λͺ¨λ μμ‘΄νλ ν΄λμ€λ€μ μλ‘μ΄ μ»΄ν¬λνΈλ‘ μ΄λ μν΄- ννΈλ¬μ§(Jitters)
- μꡬ μ¬νμ΄ λ³κ²½λλ©΄ μ»΄ν¬λνΈ κ΅¬μ‘°λ λ³κ²½λ μ μλ€
νμμ(top-down) μ€κ³
μ»΄ν¬λνΈ κ΅¬μ‘°λ νν₯μμΌλ‘ μ€κ³λ μ μλ€.
SDP: μμ λ μμ‘΄μ± μμΉ
μμ μ±μ λ°©ν₯μΌλ‘ μμ‘΄νλΌ
- λ³κ²½μ΄ μ½μ§ μμ μ»΄ν¬λνΈκ° λ³λμ΄ μμλλ μ»΄ν¬λνΈμ μμ‘΄νκ² λ§λ€μ΄μλ μ λλ‘ μλ¨
- νλ² μμ‘΄νκ² λλ©΄ λ³λμ±μ΄ ν° μ»΄ν¬λνΈλ κ²°κ΅ λ³κ²½μ΄ μ΄λ €μ μ§
- μμ λ μμ‘΄μ± μμΉμ μ€μνλ©΄ λ³κ²½νκΈ° μ΄λ €μ΄ λͺ¨λμ΄ λ³κ²½νκΈ° μ½κ² λ§λ€μ΄μ§ λͺ¨λμ μμ‘΄νμ§ μλλ‘ λ§λ€ μ μμ- μμ μ±
- λ³κ²½μ λ§λ€κΈ° μν΄ νμν μμ λκ³Ό κ΄λ ¨ λ¨
- μ»΄ν¬λνΈ μμͺ½μΌλ‘ λ€μ΄μ€λ μμ‘΄μ±μ΄ λ§μμ§λ©΄ μλΉν μμ μ μ΄λΌ λ³Ό μ μλ€
- μ¬μν λ³κ²½μ΄λΌλ μμ‘΄νλ λͺ¨λ μ»΄ν¬λνΈλ₯Ό λ§μ‘±μν€λ©΄μ λ³κ²½νλ €λ©΄ μλΉν λ Έλ ₯μ΄ νμ
- μ¬λ¬ μ»΄ν¬λνΈκ° νλμ μ»΄ν¬λνΈμ μμ‘΄νλ©΄, μμ‘΄ λμμ μ»΄ν¬λνΈλ λ³κ²½νμ§ λ§μμΌ νλ€
- μ΄ κ²½μ° μμ‘΄ λμ μ»΄ν¬λνΈλ λ€λ₯Έ μ¬λ¬ μ»΄ν¬λνΈλ₯Όμ± μμ§λ€
- λ°λλ‘ μμ‘΄ λμ μ»΄ν¬λνΈλ μ΄λμλ μμ‘΄νμ§ μμΌλ―λ‘λ 립μ μ΄λ€
- μ΄λ€ ν μ»΄ν¬λνΈκ° λ€λ₯Έ μ¬λ¬ μ»΄ν¬λνΈλ₯Ό μμ‘΄νλ€λ©΄, ν΄λΉ μ»΄ν¬λνΈλ μ± μμ±μ΄ μλ€κ³ ν μ μλ€.
- λ€λ§, μμ‘΄νλ μ»΄ν¬λνΈμ μμ λ°λΌ λ³κ²½μ΄ λ°μν μ μλ μμΈμ΄ λ§μμ§λ€.
- μ΄ κ²½μ°λμμ‘΄μ μ΄λ€
- μμ μ± μ§ν
- μ»΄ν¬λνΈ μμ μ±μ μΈ‘μ ν μ μμκΉ? -> μ»΄ν¬λνΈλ‘ λ€μ΄μ€κ³ λκ°λ μμ‘΄μ±μ κ°μλ₯Ό μΈμ΄ 보λ λ°©λ²
- μ΄ μλ₯Ό ν΅ν΄ μ»΄ν¬λνΈκ° μμΉμ(positional) μ΄λ μ λμ μμ μ±μ κ°μ§λμ§ κ³μ° κ°λ₯
- Fan-in
- μμΌλ‘ λ€μ΄μ€λ μμ‘΄μ±
- μ»΄ν¬λνΈ λ΄λΆμ ν΄λμ€μ μμ‘΄νλ μ»΄ν¬λνΈ μΈλΆμ ν΄λμ€ κ°μ
- Fan-out
- λ°κΉ₯μΌλ‘ λκ°λ μμ‘΄μ±
- μ»΄ν¬λνΈ μΈλΆμ ν΄λμ€μ μμ‘΄νλ μ»΄ν¬λνΈ λ΄λΆμ ν΄λμ€ κ°μ
- I(λΆμμ μ±): I = Fan-out / (Fan-in + Fan-out),
- [0, 1] μ¬μ΄μ κ°μ κ°μ§
- 0μΌ μλ‘ μμ λ μ»΄ν¬λνΈ -> λ 립μ μ΄λ€
- 1μΌ μλ‘ -> μμ‘΄μ μ΄λ€- λͺ¨λ μ»΄ν¬λνΈκ° μμ μ μ΄μ΄μΌ νλ κ²μ μλλ€
- λͺ¨λ μ»΄ν¬λνΈκ° μ΅κ³ λ‘ μμ μ μΈ μμ€ν μ΄λΌλ©΄ λ³κ²½μ΄ λΆκ°λ₯ ν¨
SAP: μμ νλ μΆμν μμΉ
μ»΄ν¬λνΈλ μμ λ μ λλ§νΌλ§ μΆμν λμ΄μΌ νλ€.
- μμ€ν μμ μμ£Ό λ³κ²½ν΄μλ μλλ μννΈμ¨μ΄
- κ³ μμ€ μν€ν μ² or μ μ± κ²°μ κ³Ό κ΄λ ¨λ μννΈμ¨μ΄- μ»΄ν¬λνΈκ° μ΅λλ‘ μμ λ μνμ΄λ©΄μ λμμ λ³κ²½μ μΆ©λΆν λμν μ μμ μ λλ‘ μ μ°νκ² λ§λ€ μ μμκΉ?
- OCP μμΉμ μ΄μ©νμ
- ν΄λμ€λ₯Ό μμ νμ§ μκ³ λ νμ₯μ΄ μΆ©λΆν κ°λ₯ν μ λλ‘ ν΄λμ€λ₯Ό μ μ°νκ² λ§λ€ μ μμ
- μ΄ μμΉμ μ€μνλ ν΄λμ€ -> μΆμ± ν΄λμ€- SAPλ μμ μ±κ³Ό μΆμν μ λ μ¬μ΄μ κ΄κ³λ₯Ό μ μ