[TIL] 2024-12-19_SOLID

YuriΒ·2024λ…„ 12μ›” 19일

TIL

λͺ©λ‘ 보기
11/59
post-thumbnail

1. SOLID

SOLID μ›μΉ™μ΄λž€ 객체지ν–₯ μ„€κ³„μ—μ„œ μ§€μΌœμ•Ό ν•  5개의 μ†Œν”„νŠΈμ›¨μ–΄ 개발 원칙(SRP, OCP, LSP, ISP, DIP)을 λ§ν•œλ‹€.

  • SRP(Single Responsibility Principle): 단일 μ±…μž„ 원칙
  • OCP(Open Closed Principle): 개방 폐쇄 원칙
  • LSP(Listov Subsitution Principle): λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙
  • ISP(Interface Segregation Principle): μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙
  • DIP(Dependency Inversion Principle): 의쑴 μ—­μ „ 원칙

ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ‹œκ°„μ΄ μ§€λ‚˜λ„ μœ μ§€ λ³΄μˆ˜μ™€ ν™•μž₯이 μ‰¬μš΄ μ‹œμŠ€ν…œμ„ λ§Œλ“€κ³ μž ν•  λ•Œ 이 원칙듀을 ν•¨κ»˜ μ μš©ν•  수 μžˆλ‹€. SOLID 원칙듀은 μ†Œν”„νŠΈμ›¨μ–΄ μž‘μ—…μ—μ„œ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ†ŒμŠ€ μ½”λ“œλ₯Ό 읽기 쉽고 ν™•μž₯ν•˜κΈ° μ‰½κ²Œ 될 λ•ŒκΉŒμ§€ μ†Œν”„νŠΈμ›¨μ–΄ μ†ŒμŠ€ μ½”λ“œλ₯Ό λ¦¬νŒ©ν„°λ§ν•˜μ—¬ μ½”λ“œ μŠ€λ©œμ„ μ œκ±°ν•˜κΈ° μœ„ν•΄ μ μš©ν•  수 μžˆλŠ” 지침이닀. 이 원칙듀은 μ• μžμΌ μ†Œν”„νŠΈμ›¨μ–΄ 개발과 적응적 μ†Œν”„νŠΈμ›¨μ–΄ 개발의 μ „λ°˜μ  μ „λž΅μ˜ 일뢀닀.

κ°œλ…
SRP (Single responsibility principle)단일 μ±…μž„ 원칙→ ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ μ±…μž„(κΈ°λŠ₯)만 κ°€μ Έμ•Ό ν•œλ‹€
OCP (Open/Closed principle)개방-폐쇄 원칙→ μ†Œν”„νŠΈμ›¨μ–΄ μš”μ†ŒλŠ” ν™•μž₯(μƒˆλ‘œμš΄ κΈ°λŠ₯)μ—λŠ” μ—΄λ € μžˆμœΌλ‚˜ λ³€κ²½(μˆ˜μ •)μ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€
LSP (Liskov substitution principle)λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 β†’ ν”„λ‘œκ·Έλž¨μ˜Β κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ 정확성을 κΉ¨λœ¨λ¦¬μ§€ μ•ŠμœΌλ©΄μ„œ ν•˜μœ„ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ‘œ λ°”κΏ€ 수 μžˆμ–΄μ•Ό ν•œλ‹€ = λΆ€λͺ¨ 클래슀 κ°μ²΄λŠ” μžμ‹ 클래슀둜 λŒ€μ²΄ κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.
ISP (Interface segregation principle)μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙→ νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€ μ—¬λŸ¬ κ°œκ°€ λ²”μš© μΈν„°νŽ˜μ΄μŠ€ ν•˜λ‚˜λ³΄λ‹€ λ‚«λ‹€ = μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„ΈλΆ„ν™”ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈκ°€ ν•„μš”ν•˜μ§€ μ•ŠλŠ” μΈν„°νŽ˜μ΄μŠ€μ˜ κΈ°λŠ₯을 μ˜€λ²„λΌμ΄λ”© ν•˜λŠ” 것을 ν”Όν•΄μ•Ό ν•œλ‹€
DIP (Dependency inversion principle)μ˜μ‘΄κ΄€κ³„ μ—­μ „ 원칙 β†’ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” β€œμΆ”μƒν™”μ— μ˜μ‘΄ν•΄μ•Όμ§€, ꡬ체화에 μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€.” μ˜μ‘΄μ„± μ£Όμž…μ€ 이 원칙을 λ”°λ₯΄λŠ” 방법 쀑 ν•˜λ‚˜λ‹€ = 클래슀의 μƒμœ„ 클래슀 ν˜Ήμ€ μΆ”μƒν™”λœ μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€.

✏️ μ½”λ“œ 슀멜(Code-Smell): 컴퓨터 ν”„λ‘œκ·Έλž˜λ° μ½”λ“œμ—μ„œ 더 μ‹¬μ˜€ν•œ 문제λ₯Ό μΌμœΌν‚¬ κ°€λŠ₯성이 μžˆλŠ” ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€ μ½”λ“œμ˜ νŠΉμ§•μ„ 가리킨닀. μ‘μš© ν”„λ‘œκ·Έλž¨ μˆ˜μ€€(쀑볡 μ½”λ“œ, 샷건 효과 λ“±), 클래슀 μˆ˜μ€€(라지 클래슀, 게으λ₯Έ 클래슀 λ“±), λ©”μ„œλ“œ μˆ˜μ€€(λ„ˆλ¬΄ λ§Žμ€ λ§€κ°œλ³€μˆ˜, κΈ΄ λ©”μ„œλ“œ λ“±)의 μ½”λ“œ 슀멜이 μžˆλ‹€.

πŸ€” μ•ˆν‹°νŒ¨ν„΄ (anti-pattern): μ†Œν”„νŠΈμ›¨μ–΄ 곡학 λΆ„μ•Ό μš©μ–΄μ΄λ©°, μ‹€μ œ 많이 μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μ΄μ§€λ§Œ λΉ„νš¨μœ¨μ μ΄κ±°λ‚˜ 비생산적인 νŒ¨ν„΄μ„ μ˜λ―Έν•œλ‹€.

profile
μ•ˆλ…•ν•˜μ„Έμš” :)

0개의 λŒ“κΈ€