JAVA & OOP

SOLID 원칙 [객체 지ν–₯ 섀계/ 5가지 원칙 /κ°œλ…]

DAHLIA CHOI 2021. 7. 8. 16:21

SOLID 원칙은 5가지 μ›μΉ™μœΌλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.

  1. SRP : 단일 μ±…μž„ 원칙 (Single Responsibility Principle)
  2. OCP : 개방-폐쇄 원칙 (Open/Closed Principle)
  3. LSP : λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 (Liskov Substitution Principle)
  4. ISP : μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 (Interface Segregation Principle)
  5. DIP : μ˜μ‘΄κ΄€κ³„ μ—­μ „ 원칙 (Dependency Inversion Principle) 

 

🧑 SRP (단일 μ±…μž„ 원칙)

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

* μ€‘μš”ν•œ κΈ°μ€€ :  λ³€κ²½ (변경이 μžˆμ„ λ•Œ νŒŒκΈ‰ νš¨κ³Όκ°€ 적으면 단일 μ±…μž„ 원칙을 잘 λ”°λ₯Έ 것이닀.)

 

πŸ’› OCP (개방-폐쇄 원칙)

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

- λ‹€ν˜•μ„±μ„ μ΄μš©ν•΄μ„œ 변경에 μš©μ΄ν•˜κ²Œ λ§Œλ“€ μˆ˜λŠ” μžˆμ§€λ§Œ κ΅¬ν˜„ 객체λ₯Ό λ³€κ²½ν•˜λ €λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ₯Ό λ³€κ²½ν•  수 밖에 μ—†λ‹€.

❗ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ΄μš©ν•œλ‹€λ©΄ ν•΄κ²° κ°€λŠ₯!!

 

πŸ’š LSP (λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙)

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

- κΈ°λŠ₯적으둜 보μž₯ν•΄μ€˜μ•Ό ν•œλ‹€. ( ex) 엑셀은 무쑰건 μ•žμœΌλ‘œ 가야됨, 후진은 무쑰건 λ’€λ‘œ 가야됨) 

 

πŸ’™ ISP (μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙)

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

- ex) μžλ™μ°¨ μΈν„°νŽ˜μ΄μŠ€ -> μš΄μ „ μΈν„°νŽ˜μ΄μŠ€, μ •λΉ„ μΈν„°νŽ˜μ΄μŠ€λ‘œ λΆ„λ¦¬ν•΄μ„œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λͺ…ν™•ν•˜κ²Œ ν•œλ‹€.

 

πŸ’œ DIP (μ˜μ‘΄κ΄€κ³„ μ—­μ „ 원칙)

- ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” "좔상화에 μ˜μ‘΄ν•΄μ•Όμ§€, ꡬ체화에 μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€." μ˜μ‘΄μ„± μ£Όμž…μ€ 이 원칙을 λ”°λ₯΄λŠ” 방법 쀑 ν•˜λ‚˜λ‹€.

πŸ‘‰ κ΅¬ν˜„ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜μ§€ 말고, μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•˜λΌλŠ” 뜻 

- ex) Member m = new MemoryMember(); ❌ (이건 좔상화(μΈν„°νŽ˜μ΄μŠ€) 에도 μ˜μ‘΄ν•˜κ³ , ꡬ체화에도 μ˜μ‘΄ν•˜κ³  μžˆλŠ” μƒνƒœ)

       Member m; μ΄λ ‡κ²Œ ν•˜κ³  μƒμ„±μžλ₯Ό λ§Œλ“€μ–΄μ„œ μ—°κ²°μ‹œμΌœμ€€λ‹€.

 

 

 

좜처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard