SOLID
μ’μ κ°μ²΄ μ§ν₯ μ€κ³μ 5κ°μ§ μμΉ
- SRP: λ¨μΌ μ± μ μμΉ (single responsibility principle)
- OCP: κ°λ°©-νμ μμΉ (Open/closed principle)
- LSP: 리μ€μ½ν μΉν μμΉ (Liskov substitution principle)
- ISP: μΈν°νμ΄μ€ λΆλ¦¬ μμΉ (Interface segregation principle)
- DIP: μμ‘΄κ΄κ³ μμ μμΉ (Dependency inversion principle)
1. SRP: λ¨μΌ μ± μ μμΉ
ν ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ€
νλμ μ± μμ΄λΌλ κ²μ λͺ¨νΈνλ€.
- ν΄ μ μκ³ , μμ μ μλ€.
- λ¬Έλ§₯κ³Ό μν©μ λ°λΌ λ€λ₯΄λ€.
μ€μν κΈ°μ€μ λ³κ²½μ΄λ€. λ³κ²½μ΄ μμ λ νκΈ ν¨κ³Όκ° μ μΌλ©΄ λ¨μΌ μ±
μ μμΉμ μ λ°λ₯Έ κ²
ex) UI λ³κ²½, κ°μ²΄μ μμ±κ³Ό μ¬μ© λΆλ¦¬
2. OCP: κ°λ°©-νμ μμΉ
μννΈμ¨μ΄ μμλ νμ₯μλ μ΄λ € μμΌλ λ³κ²½μλ λ«ν μμ΄μΌ νλ€.
λ€νμ± νμ©
μΈν°νμ΄μ€λ₯Ό ꡬνν μλ‘μ΄ ν΄λμ€λ₯Ό νλ λ§λ€μ΄μ μλ‘μ΄ κΈ°λ₯μ ꡬν
μν κ³Ό ꡬνμ λΆλ¦¬
λ¬Έμ μ
public class MemberService {
// private MemberRepository memberRepository = new MemoryMemberRepository();
private MemberRepostiory memberRepository = new JdbcMemberRepository();
}
MemberService ν΄λΌμ΄μΈνΈκ° ꡬν ν΄λμ€λ₯Ό μ§μ μ ν
ꡬν κ°μ²΄λ₯Ό λ³κ²½νλ €λ©΄ ν΄λΌμ΄μΈνΈ μ½λλ₯Ό λ³κ²½ν΄μΌ νλ€
λΆλͺ λ€νμ±μ μ¬μ©νμ§λ§ OCP μμΉμ μ§ν¬ μ μλ€
κ°μ²΄λ₯Ό μμ±νκ³ , μ°κ΄κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ λ³λμ 쑰립, μ€μ μκ° νμνλ€.
3. LSP: 리μ€μ½ν μΉν μμΉ
νλ‘κ·Έλ¨μ κ°μ²΄λ νλ‘κ·Έλ¨μ μ νμ±μ κΉ¨λ¨λ¦¬μ§ μμΌλ©΄μ νμ νμ μ μΈμ€ν΄μ€λ‘ λ°κΏ μ μμ΄μΌ νλ€.
λ€νμ±μμ νμ ν΄λμ€λ μΈν°νμ΄μ€ κ·μ½μ λ€ μ§μΌμΌ νλ€λ κ², λ€νμ±μ μ§μνκΈ° μν μμΉ, μΈν°νμ΄μ€λ₯Ό ꡬνν ꡬν체λ λ―Ώκ³ μ¬μ©νλ €λ©΄, μ΄ μμΉμ΄ νμνλ€.
λ¨μν μ»΄νμΌμ μ±κ³΅νλ κ²μ λμ΄μλ μ΄μΌκΈ°
4. ISP: μΈν°νμ΄μ€ λΆλ¦¬ μμΉ
νΉμ ν΄λΌμ΄μΈνΈλ₯Ό μν μΈν°νμ΄μ€ μ¬λ¬ κ°κ° λ²μ© μΈν°νμ΄μ€ νλλ³΄λ€ λ«λ€.
μλμ°¨ μΈν°νμ΄μ€ -> μ΄μ μΈν°νμ΄μ€, μ λΉ μΈν°νμ΄μ€λ‘ λΆλ¦¬
μ¬μ©μ ν΄λΌμ΄μΈνΈ -> μ΄μ μ ν΄λΌμ΄μΈνΈ, μ λΉμ¬ ν΄λΌμ΄μΈνΈλ‘ λΆλ¦¬
λΆλ¦¬νλ©΄ μ λΉ μΈν°νμ΄μ€ μμ²΄κ° λ³ν΄λ μ΄μ μ ν΄λΌμ΄μΈνΈμ μν₯μ μ£Όμ§ μμ
μΈν°νμ΄μ€κ° λͺ νν΄μ§κ³ , λ체 κ°λ₯μ±μ΄ λμμ§λ€.
5. DIP: μμ‘΄κ΄κ³ μμ μμΉ
νλ‘κ·Έλλ¨Έλ "μΆμνμ μμ‘΄ν΄μΌμ§, ꡬ체νμ μμ‘΄νλ©΄ μλλ€." μμ‘΄μ± μ£Όμ μ μ΄ μμΉμ λ°λ₯΄λ λ°©λ² μ€ νλλ€.
μ½κ² μ΄μΌκΈ°ν΄μ ꡬν ν΄λμ€μ μμ‘΄νμ§ λ§κ³ , μΈν°νμ΄μ€μ μμ‘΄νλΌλ λ―
μν (Role)μ μμ‘΄νκ² ν΄μΌνλ€λ κ²κ³Ό κ°μ μλ―Έ
κ°μ²΄ μΈμλ ν΄λΌμ΄μΈνΈκ° μΈν°νμ΄μ€μ μμ‘΄ν΄μΌ μ μ°νκ² κ΅¬ν체λ₯Ό λ³κ²½ν μ μλ€! ꡬν체μ μμ‘΄νκ² λλ©΄ λ³κ²½μ΄ μμ£Ό μ΄λ €μμ§λ€.
λ°λΌμ μμ MemberService ν΄λΌμ΄μΈνΈκ° ꡬν ν΄λμ€λ₯Ό μ ννλ κ² μμ DIP μλ°
'β Personal_Study > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μμ‘΄κ΄κ³ μλ μ£Όμ (1) | 2023.01.09 |
---|---|
ComponentScan (0) | 2023.01.07 |
Singleton Container (0) | 2023.01.06 |
μ€νλ§ μ»¨ν μ΄λ & Bean μ‘°ν (0) | 2023.01.05 |
μ μ΄μ μμ (IoC) & μμ‘΄μ± μ£Όμ (DI) (1) | 2023.01.01 |
λκΈ