IT/Java

[Java] SOLID: 객체 μ§€ν–₯ μ„€κ³„μ˜ 5원칙

zi0_0 2025. 4. 3. 13:51

SOLIDλž€?

μ‹œμŠ€ν…œμ— μƒˆλ‘œμš΄ μš”κ΅¬μ‚¬ν•­μ΄λ‚˜ 변경사항이 μžˆμ„ λ•Œλ„ μœ μ—°ν•˜κ²Œ λŒ€μ²΄ν•˜κ³  ν™•μž₯μ„± μžˆλŠ” μ‹œμŠ€ν…œ ꡬ쑰λ₯Ό λ§Œλ“œλŠ” 것이닀.

SOLID μ‹œμŠ€ν…œμ„ μ μš©ν•œλ‹€? = λ¦¬νŒ©ν† λ§μ— μ†Œμš”λ˜λŠ” μ‹œκ°„μ„ μ€„μ—¬μ„œ ν”„λ‘œμ νŠΈ 개발의 생산성을 높일 수 μžˆλ‹€.

 


 

S - 단일 μ±…μž„ 원칙 

SPR, Single Responseibility Principle 
"ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€" 
  • ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€. 이둜 인해 ν΄λž˜μŠ€κ°€ λ³€κ²½λ˜μ–΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” 단 ν•˜λ‚˜λΏμ΄μ–΄μ•Ό 함
  • 클래슀의 역할을 λͺ…ν™•νžˆ ν•˜μ—¬ 변경에 λ”°λ₯Έ νŒŒκΈ‰ 효과λ₯Ό μ΅œμ†Œν™”ν•  수 있음 

 

 

O - 개방/폐쇄 원칙

OCP, Open/Closed Principle 
"ν™•μž₯μ—λŠ” μ—΄λ € μžˆμ–΄μ•Ό ν•˜κ³ , λ³€κ²½μ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€" 
  • κΈ°μ‘΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆλ„λ‘ 섀계해야 함 
  • 좔상화와 λ‹€ν˜•μ„±μ„ 잘 ν™œμš©ν•˜μ—¬ 이 원칙을 지킬 수 있음 

 

 

L - λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 

LSP, Liskov Subsitution Principle 
"μžμ‹ ν΄λž˜μŠ€λŠ” μ–Έμ œλ‚˜ λΆ€λͺ¨ 클래슀의 역할을 λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€" 
  • 상속 맏은 μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ 클래슀의 역할을 λŒ€μ²΄ν•  수 μžˆμ–΄μ•Ό 함 
  • λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ κΈ°λŒ€ν•˜λŠ” λ™μž‘μ„ κ·ΈλŒ€λ‘œ μˆ˜ν–‰ν•΄μ•Ό ν•˜λ©°, λΆ€λͺ¨ 클래슀의 λͺ¨λ“  κΈ°λŠ₯을 지원해야 함 
  • ex: μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν•˜μœ„ ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ κ·œμ•½μ„ λͺ¨λ‘ μ€€μˆ˜ν•΄μ•Ό 함 

 

 

I - μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙

ISP, Interface Segregation Principle 
"ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ„œλ“œμ— μ˜μ‘΄ν•˜λ©΄ μ•ˆ λœλ‹€" 
  • ν•˜λ‚˜μ˜ μ»€λ‹€λž€ μΈν„°νŽ˜μ΄μŠ€λ³΄λ‹€λŠ” μ—­ν• λ³„λ‘œ 잘게 λ‚˜λˆˆ μΈν„°νŽ˜μ΄μŠ€κ°€ μ’‹μŒ 

 

 

D - 의쑴 μ—­μ „ 원칙 

DIP, Dependency Inversion Principle 
"μƒμœ„ λͺ¨λ“ˆμ€ ν•˜μœ„ λͺ¨λ“ˆμ— μ˜μ‘΄ν•˜λ©΄ μ•ˆ 되며, λ‘˜ λ‹€ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€"
  • κ΅¬ν˜„ ν΄λž˜μŠ€κ°€ μ•„λ‹Œ μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 ν΄λž˜μŠ€μ—μ— μ˜μ‘΄ν•¨μœΌλ‘œμ¨ μœ μ—°μ„±μ„ 확보할 수 있음 

 

 

Copy