Skip to content

Latest commit

Β 

History

History
37 lines (30 loc) Β· 2.73 KB

File metadata and controls

37 lines (30 loc) Β· 2.73 KB

OOP(Object Oriented Programming)

객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 섀계 원칙

SOLID 원칙

단일 μ±…μž„ 원칙(SRP, Single Responsibility Principle)

  • κ°μ²΄λŠ” 단 ν•˜λ‚˜μ˜ μ±…μž„λ§Œ κ°€μ Έμ•Ό ν•œλ‹€.
  • μ±…μž„μ΄λž€? ν•΄μ•Όν•˜λŠ” 것, ν•  수 μžˆλŠ” 것, ν•΄μ•Όν•˜λŠ” 것,..
  • μ±…μž„ 뢄리 : ν•œ ν΄λž˜μŠ€μ— 단 ν•˜λ‚˜μ˜ μ±…μž„λ§Œ μˆ˜ν–‰ν•˜λ„λ‘ ν•΄ Immutable Classλ₯Ό μ§€ν–₯ν•œλ‹€.
    • μ±…μž„μ΄ λ§Žμ„ 수둝 클래슀 내뢀에 μ„œλ‘œ λ‹€λ₯Έ 역할을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλΌλ¦¬ κ°•κ²°ν•©ν•  κ°€λŠ₯성이 λ†’λ‹€.

개방-νμ‡„μ˜ 원칙(OCP, Open Closed Principle)

  • ν™•μž₯에 λŒ€ν•΄μ„œλŠ” 개방(open)적이며 변경에 λŒ€ν•΄μ„œλŠ” 폐쇄(Close)λ˜μ–΄μ•Ό ν•œλ‹€.
  • 즉 기쑴의 μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©° κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆλ„λ‘ 섀계가 λ˜μ–΄μ•Ό ν•œλ‹€.
  • ν•΄λ‹Ή 원칙을 μ μš©ν•˜κΈ° μœ„ν•΄ μ μš©ν•˜λŠ” 방법은 상속(is-a)κ³Ό μ»΄ν¬μ§€μ…˜(has-a)이 μžˆμ§€λ§Œ μ»΄ν¬μ§€μ…˜μ„ μΆ”μ²œν•œλ‹€.
  • 상속은 μƒμœ„ ν΄λž˜μŠ€κ°€ λ³€ν•˜λ©΄ ν•˜μœ„ ν΄λž˜μŠ€μ— λΌμΉ˜λŠ” 영ν–₯이 크기 λ•Œλ¬Έμ΄λ‹€.

λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙(LSP, Liskov Substitution Principle)

  • μžμ‹ ν΄λž˜μŠ€λŠ” μ΅œμ†Œν•œ μžμ‹ μ˜ λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ κ°€λŠ₯ν•œ ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • LSPλ₯Ό λ§Œμ‘±ν•œλ‹€λ©΄ λΆ€λͺ¨ 클래슀의 μΈμŠ€ν„΄μŠ€ λŒ€μ‹  μžμ‹ 클래슀의 μΈμŠ€ν„΄μŠ€λ‘œ λŒ€μ²΄ν•΄λ„ ν”„λ‘œκ·Έλž¨μ˜ μ˜λ―Έκ°€ λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.(ex- List<Integer> l = new ArrayList<>();)
  • LSPλ₯Ό λ§Œμ‘±μ‹œν‚€λŠ” 방법 쀑 ν•˜λ‚˜λŠ” λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ₯Ό Overrideν•˜μ§€ μ•ŠλŠ” 것이닀.

μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙(ISP, Interface Segregation Principle)

  • μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— νŠΉν™”λ˜λ„λ‘ λΆ„λ¦¬μ‹œν‚€λŠ” 섀계 원칙
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ μ΄μš©ν•˜μ§€ μ•ŠλŠ” κΈ°λŠ₯μ—λŠ” 영ν–₯을 λ°›μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.
  • 단일 μ±…μž„ 원칙과 λ°€μ ‘ν•œ 관계가 μžˆλ‹€.

의쑴 μ—­μ „ 원칙(DIP, Dependendy Inversion Principle)

  • 의쑴 관계λ₯Ό 맺을 λ•Œ λ³€ν™”ν•˜κΈ° μ‰¬μš΄ 것 λ˜λŠ” 자주 λ³€ν™”ν•˜κΈ° λ³΄λ‹€λŠ” λ³€ν™”ν•˜κΈ° μ–΄λ €μš΄ 것, 거의 λ³€ν™”κ°€ μ—†λŠ” 것에 μ˜μ‘΄ν•˜λΌλŠ” 것.
  • ν΄λž˜μŠ€κ°„ 의쑴 κ΄€κ³„λž€ ? ν•œ ν΄λž˜μŠ€κ°€ μ–΄λ–€ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ €κ³  ν•  λ•Œ λ‹€λ₯Έ 클래슀의 μ„œλΉ„μŠ€κ°€ ν•„μš”ν•œ 경우
    • ex) A 클래슀 내뢀에 new μ—°μ‚°μžλ‘œ B ν΄λž˜μŠ€κ°€ μƒμ„±λ˜μ–΄ μžˆλŠ” 경우.
  • DIP λ§Œμ‘±μ‹œν‚€λŠ” 방법 : μ–΄λ–€ ν΄λž˜μŠ€κ°€ 의쑴 관계λ₯Ό 맺을 λ•Œ ꡬ체적인 ν΄λž˜μŠ€λ³΄λ‹€λŠ” μΈν„°νŽ˜μ΄μŠ€λ‚˜ 좔상 ν΄λž˜μŠ€μ™€ 의쑴 관계λ₯Ό 맺도둝 ν•œλ‹€.
  • DIPλ₯Ό λ§Œμ‘±ν•˜λŠ” μ„€κ³„λŠ” DI 기술둜 λ³€ν™”λ₯Ό μ‰½κ²Œ μˆ˜μš©ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있게 λœλ‹€.

μ°Έκ³