쒋은 객체 지ν–₯ μ„€κ³„μ˜ 5가지 원칙 SOLID

2021. 12. 10. 11:26ㆍBe Ready

728x90

SRP : 단일 μ±…μž„μ˜ 원칙 (Single Responsibility principle)

-> ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€. 

μœ„μ— ν•œ ν΄λž˜μŠ€κ°€ ν•˜λ‚˜μ˜ μ±…μž„μ„ κ°€μ Έμ•Όν•œλ‹€. μ΄κ²ƒλ§Œ 보면 말은 이해가 κ°€μ§€λ§Œ ν•˜λ‚˜μ˜ μ±…μž„?? μ΄λ ‡κ²Œ μƒκ°ν•˜κ²Œ λœλ‹€.

그리고 κ·Έ μ±…μž„μ΄λž€ 것도 기쀀이 μ• λ§€ν•˜λ‹€.

이λ₯Ό 쒀더 μ‰½κ²Œ μƒκ°ν•˜λ©΄ μ±…μž„μ˜ 기쀀은 "λ³€κ²½"이라고 ν•  수 μžˆλ‹€. 

변경이 μžˆμ„ λ•Œ νŒŒκΈ‰ νš¨κ³Όκ°€ 적으면 단일 μ±…μž„ 원칙을 잘 λ”°λ₯Έκ²ƒμ΄ λœλ‹€. 

 

OCP : 개방-νμ‡„μ˜ 원칙 (Open/Closed principle)

-> μ†Œν”„νŠΈμ›¨μ–΄ μš”μ†ŒλŠ” ν™•μž₯μ—λŠ” μ—΄λ € μžˆμ–΄μ•Ό ν•˜λ‚˜ λ³€κ²½μ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€. 

개방-νμ‡„μ˜ 원칙 μ—­μ‹œ 말뢀터가 이해가 μ•ˆλœλ‹€γ…‹γ…‹γ…‹

 

그런데 μ½”λ“œλ‘œ 생각을 해보면, μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³ , 이λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€λ‚˜ κ΅¬ν˜„ 객체가 μžˆλ‹€. 

μΈν„°νŽ˜μ΄μŠ€ ν•˜λ‚˜λ₯Ό 두고, 이제 μƒˆλ‘œμš΄ κΈ°μˆ μ„ λ„μž…ν•΄μ„œ μƒˆλ‘­κ²Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀λ₯Ό λ§Œλ“€μ–΄ 기술 ν™•μž₯이 κ°€λŠ₯ν•˜λ‹€.

 

그런데 변경에 λ‹«ν˜€μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 것은 ν΄λΌμ΄μ–ΈνŠΈμ˜ μ½”λ“œ?라고 ν•΄μ•Όν• κΉŒ μ•„λ¬΄νŠΌ 이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” κ³³μ—μ„œ 변경이 μ—†μ–΄μ•Όν•˜λŠ”λ° μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀1μ—μ„œ 클래슀2둜 λ°”κΏ€λ•Œ 변경이 μΌμ–΄λ‚˜κΈ° λ•Œλ¬Έμ— 이 원칙이 깨질 μˆ˜λ°–μ— μ—†λ‹€. (κ·Έλž˜μ„œ μŠ€ν”„λ§) 

 

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

-> ν”„λ‘œκ·Έλž¨μ˜ κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ 정확성을 κΉ¨λœ¨λ¦¬μ§€ μ•ŠμœΌλ©΄μ„œ ν•˜μœ„ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ‘œ λ°”κΏ€ 수 μžˆμ–΄μ•Ό ν•œλ‹€. 

μ΄λŠ” 즉 λ‹€ν˜•μ„±μ—μ„œ ν•˜μœ„ν΄λž˜μŠ€λ“€μ€ μΈν„°νŽ˜μ΄μŠ€μ˜ κ·œμ•½μ„ λ‹€ μ§€μΌœμ•Ό ν•œλ‹€λŠ” 것이닀. λ‹€ν˜•μ„±μ„ μ§€μ›ν•˜κΈ° μœ„ν•œ 원칙, μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ κ΅¬ν˜„μ²΄λŠ” λ―Ώκ³  μ‚¬μš©ν•˜λ €λ©΄ 이 원칙이 ν•„μš”ν•˜λ‹€. 

 

좔상화인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€κ³ , 이λ₯Ό κ΅¬ν˜„ν•˜λŠ” 클래슀λ₯Ό λ§Œλ“€λ•Œ μΈν„°νŽ˜μ΄μŠ€μ—μ„œ μ •ν•œ κ·œμ•½μ„ μ§€μΌœμ•Όν•œλ‹€λŠ” 것이닀. 

 

 

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

-> νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€ μ—¬λŸ¬ κ°œκ°€ λ²”μš© μΈν„°νŽ˜μ΄μŠ€ ν•˜λ‚˜λ³΄λ‹€ λ‚«λ‹€! 

 

이건 ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ— λ‹€ λ§Œλ“€μ–΄λ²„λ¦¬λ©΄ κΈ°λŠ₯1, κΈ°λŠ₯2 κ°€ μžˆλ‹€κ³  ν•œλ‹€λ©΄ 

κΈ°λŠ₯1을 λ³€κ²½ν•˜κ³  싢은데 ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ— λ‹€ μžˆλ‹€λ©΄ ν΄λΌμ΄μ–ΈνŠΈμ—λ„ 영ν–₯이 κ°„λ‹€. 

κ·ΈλŸ¬λ―€λ‘œ κΈ°λŠ₯에 따라 λΆ„λ€Όλ₯Ό ν•˜λ©΄ μΈν„°νŽ˜μ΄μŠ€λ„ λͺ…확해지며, λŒ€μ²΄ν•  μˆ˜λ„ μžˆλ‹€. 

 

 

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

-> ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 좔상화에 μ˜μ‘΄ν•΄μ•Όμ§€ ꡬ체화에 μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€. 

즉 κ΅¬ν˜„ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜λΌλŠ” λœ»μ΄λ‹€!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90