Backend/Spring

[Spring] 쒋은 객체 μ§€ν–₯ μ„€κ³„μ˜ 5κ°€μ§€ 원칙(SOLID)

_μ„±ν˜Έ_ 2022. 3. 14. 16:52
728x90
λ°˜μ‘ν˜•

SRP(Single responsibility principle) 단일 μ±…μž„ 원칙  

  • ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€.
  • μ€‘μš”ν•œ 기쀀은 변경이닀. 변경이 μžˆμ„ λ•Œ νŒŒκΈ‰ νš¨κ³Όκ°€ 적으면 단일 μ±…μž„ 원칙을 잘 λ”°λ₯Έ 것이닀.
  • ex) UI λ³€κ²½, 객체의 생성과 μ‚¬μš©μ„ 뢄리

OCP(Open/closed principle) 개방-폐쇄 원칙

  • μ†Œν”„νŠΈμ›¨μ–΄ μš”μ†ŒλŠ” ν™•μž₯μ—λŠ” μ—΄λ € μžˆμœΌλ‚˜ λ³€κ²½μ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€.
  • λ‹€ν˜•μ„±μ„ μ‚¬μš©ν•˜λ”λΌλ„ OCP 원칙을 지킬 수 μ—†λ‹€λŠ” 문제점(ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œ λ³€κ²½)이 μžˆλ‹€. 
  • 객체λ₯Ό μƒμ„±ν•˜κ³ , 연관관계λ₯Ό λ§Ίμ–΄μ£ΌλŠ” λ³„λ„μ˜ 쑰립, μ„€μ •μžκ°€ ν•„μš”ν•˜λ‹€. (μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ˜ μ—­ν• )

LSP(Liskov substitution principle) λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙

  • ν”„λ‘œκ·Έλž¨μ˜ κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ 정확성을 κΉ¨λœ¨λ¦¬μ§€ μ•ŠμœΌλ©΄μ„œ ν•˜μœ„ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ‘œ λ°”κΏ€ 수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • ex) μžλ™μ°¨ μΈν„°νŽ˜μ΄μŠ€μ˜ 엑셀은 μ•žμœΌλ‘œ κ°€λΌλŠ” κΈ°λŠ₯, λ’€λ‘œ κ°€κ²Œ κ΅¬ν˜„ν•˜λ©΄ LSP μœ„λ°˜, λŠλ¦¬λ”λΌλ„ μ•žμœΌλ‘œ κ°€μ•Όν•œλ‹€.

ISP(Interface segregation principle) μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙

  • νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€ μ—¬λŸ¬ κ°œκ°€ λ²”μš© μΈν„°νŽ˜μ΄μŠ€ ν•˜λ‚˜λ³΄λ‹€ λ‚«λ‹€.
  • μžλ™μ°¨ μΈν„°νŽ˜μ΄μŠ€ -> μš΄μ „ μΈν„°νŽ˜μ΄μŠ€, μ •λΉ„ μΈν„°νŽ˜μ΄μŠ€λ‘œ 뢄리
  • μ‚¬μš©μž ν΄λΌμ΄μ–ΈνŠΈ -> μš΄μ „μž ν΄λΌμ΄μ–ΈνŠΈ, 정비사 ν΄λΌμ΄μ–ΈνŠΈλ‘œ 뢄리
  • λΆ„λ¦¬ν•˜λ©΄ μ •λΉ„ μΈν„°νŽ˜μ΄μŠ€ μžμ²΄κ°€ 변해도 μš΄μ „μž ν΄λΌμ΄μ–ΈνŠΈμ— 영ν–₯을 μ£Όμ§€ μ•ŠμŒ
  • μΈν„°νŽ˜μ΄μŠ€κ°€ λͺ…ν™•ν•΄μ§€κ³ , λŒ€μ²΄ κ°€λŠ₯성이 λ†’μ•„μ§„λ‹€.

DIP(Dependency inversion principle) μ˜μ‘΄κ΄€κ³„ μ—­μ „ 원칙

  • ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” "좔상화에 μ˜μ‘΄ν•΄μ•Όμ§€, ꡬ체화에 μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€." μ˜μ‘΄μ„± μ£Όμž…μ€ 이 원칙을 λ”°λ₯΄λŠ” 방법 쀑 ν•˜λ‚˜λ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œκ°€ κ΅¬ν˜„ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜μ§€ 말고, μΈν„°νŽ˜μ΄μŠ€(μ—­ν• )에 μ˜μ‘΄ν•˜λΌλŠ” λœ»μ΄λ‹€.