SOLID

SOLID

μ •μ˜

객체지ν–₯적 μ„€κ³„μ˜ ν’ˆμ§ˆμ„ 높이기 μœ„ν•œ 5κ°€μ§€μ˜ 원리λ₯Ό λ§ν•œλ‹€. μ •ν™•νžˆλŠ”, 각 μ›λ¦¬μ˜ μ•ž κΈ€μžλ₯Ό λ”°μ„œ 이어 λΆ™μ—¬ SOLID이닀.

5κ°€μ§€ μ›λ¦¬λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  1. S ingle Responsibility Principle (SRP, 단일 μ±…μž„ 원칙)

  2. O pen Closed Principle (OCP, 개방 폐쇄 원칙)

  3. L iskov substitution principle (LSP, λ¦¬μŠ€μ½”ν”„ ꡐ체 원칙)

  4. I nterface segregation principle (ISP, μΈν„°νŽ˜μ΄μŠ€ 격리 원칙)

  5. D ependency inversion principle (DIP, μ˜μ‘΄κ΄€κ³„ μ—­μ „ 원칙)

λͺ©ν‘œ

μ•žμ„œ λ§ν–ˆλ“― SOLID 원칙을 μ μš©ν•¨μœΌλ‘œμ¨ μ–»κ³ μž ν•˜λŠ” 이점은 λ‚˜μœ 섀계λ₯Ό μ΅œλŒ€ν•œ μ œκ±°ν•˜λŠ” 것이닀.

λ‚˜μœ μ„€κ³„μ—λŠ” λ‹€μŒμ˜ μ˜ˆμ‹œλ“€μ΄ μžˆλ‹€.

  • 경직성(Shotgun) - 일뢀λ₯Ό 고치면 λ‹€λ₯Έ λΆ€λΆ„μ—μ„œλ„ κ³ μΉ  것이 생김

  • λΆ€μ„œμ§€κΈ° 쉬움 (Fragile) - 일뢀λ₯Ό 고치면 전체 ν”„λ‘œκ·Έλž¨μ˜ μž‘λ™μ΄ 멈좀

  • 뢀동성 - μž¬μ‚¬μš©μ΄ 어렀움

  • λˆλˆν•¨ - long cycle을 μ†Œμœ ν•΄ ν•œ 번 κ³ μΉ˜λŠ”λ° λ„ˆλ¬΄ 였랜 μ‹œκ°„μ΄ κ±Έλ¦Ό

  • λ³΅μž‘ν•¨

  • λΆˆν•„μš”ν•œ 반볡

  • 뢈투λͺ…ν•œ μ˜λ„

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

μ •μ˜

ν•œ ν΄λž˜μŠ€μ—λŠ” ν•œ κ°€μ§€ μ±…μž„λ§Œ λΆ€μ—¬ν•΄μ•Ό ν•œλ‹€λŠ” 원칙

λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œ SRPλ₯Ό μ μš©ν•˜κ³ μž ν•œλ‹€λ©΄ κ²°ν•©λœ μ±…μž„μ„ κ°€μ§„ ν΄λž˜μŠ€λŠ” λΆ„λ¦¬ν•˜μ—¬ λ³„λ„μ˜ 클래슀둜 λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

μž₯점

μ±…μž„μ΄ λΆ„λ¦¬λ˜λ―€λ‘œ ν•œ λΆ€λΆ„μ˜ λ³€ν™”κ°€ λ‹€λ₯Έ 뢀뢄에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€.

Open Closed Principle (OCP, 개방 폐쇄 원칙)

μ •μ˜

μ†Œν”„νŠΈμ›¨μ–΄μ˜ κ΅¬μ„±μš”μ†ŒλŠ” ν™•μž₯μ—λŠ” μ—΄λ € μžˆμ§€λ§Œ λ³€κ²½μ—λŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 원칙

즉, 기쑴의 ꡬ성 μš”μ†ŒλŠ” μ‰½κ²Œ ν™•μž₯ν•˜μ—¬ μž¬μ‚¬μš©ν•  수 μžˆμœΌλ‚˜ μ΅œλŒ€ν•œ μˆ˜μ •μ΄ λ°œμƒν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€λŠ” 것이닀.

μž₯점

μž¬μ‚¬μš©μ„±μ€ μ’‹μ•„μ§€κ³ , μˆ˜μ •μ— λ“œλŠ” λΉ„μš©μ€ 쀄어든닀.

Liskov substitution principle (LSP, λ¦¬μŠ€μ½”ν”„ ꡐ체 원칙)

μ •μ˜

κΈ°λ³Έ 클래슀(super class)λŠ” νŒŒμƒ 클래슀(sub class)에 λŒ€ν•΄ μ•Œ ν•„μš”κ°€ μ—†μ–΄μ•Ό ν•œλ‹€λŠ” 원칙

λ˜ν•œ, νŒŒμƒ ν΄λž˜μŠ€λŠ” 항상 κΈ°λ³Έ 클래슀둜 ꡐ체할 수 μžˆμ–΄μ•Ό ν•œλ‹€.

이λ₯Ό μœ„ν•΄ μ„œλΈŒν΄λž˜μŠ€λŠ” μŠˆνΌν΄λž˜μŠ€κ°€ λ°›λŠ” λ§€κ°œλ³€μˆ˜λ₯Ό λͺ¨λ‘ λ°›μ•„μ•Ό ν•˜κ³ , μŠˆνΌν΄λž˜μŠ€κ°€ μ‚¬μš©λ  수 μžˆλŠ” κ³³μ—μ„œ μ„œλΈŒν΄λž˜μŠ€λ„ μ‚¬μš©λ  수 μžˆμ–΄μ•Ό ν•œλ‹€.

μž₯점

μ„œλΈŒν΄λž˜μŠ€μ— λ³€κ²½ 사항이 생겼을 λ•Œ λ‹€λ₯Έ ν΄λž˜μŠ€μ— 영ν–₯이 κ°€μ§€ μ•ŠλŠ”λ‹€.

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

μ •μ˜

각 ν΄λž˜μŠ€λŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ†Œλ“œμ— 의쑴 관계가 μƒκ²¨μ„œλŠ” μ•ˆ λœλ‹€λŠ” 원칙

ν•œ ν΄λž˜μŠ€μ— λ‹€λ₯Έ μ—¬λŸ¬ 클래슀λ₯Ό μœ„ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•  μ‹œ μ΄λŸ¬ν•œ λ¬Έμ œκ°€ 생긴닀.

μ΄λŸ¬ν•œ λΆˆν•„μš”ν•œ 결합은 ν•œ 클래슀의 변경사항이 생겼을 λ•Œ λ‹€λ₯Έ ν΄λž˜μŠ€λ„ λ‹€μ‹œ μ»΄νŒŒμΌν•˜κ²Œ λ§Œλ“ λ‹€.

μ΄λŸ¬ν•œ 문제λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ λΆˆν•„μš”ν•œ 의쑴 관계λ₯Ό λ§Œλ“œλŠ” ν΄λž˜μŠ€κ°€ 생길 μ‹œ λ³„λ„μ˜ μΈν„°νŽ˜μ΄μŠ€λ‘œ λΆ„λ¦¬ν•œ λ’€ 이λ₯Ό λͺ¨λ‘ κ΅¬ν˜„ν•˜λŠ” 클래슀λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

μž₯점

μ±…μž„μ΄ λΆ„λ¦¬λ˜λ―€λ‘œ ν•œ λΆ€λΆ„μ˜ λ³€ν™”κ°€ λ‹€λ₯Έ 뢀뢄에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šκ²Œ λœλ‹€.

SRPλŠ” 클래슀의 뢄리λ₯Ό 톡해 이 μž₯점을 νšλ“ν•œλ‹€λ©΄, ISPλŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œ λΆ„λ¦¬ν•˜μ—¬ 이 μž₯점을 νšλ“ν•œλ‹€.

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

μ •μ˜

좔상적인 것(μƒμœ„ μˆ˜μ€€μ˜ κ°œλ…)이 ꡬ체적인 것(ν•˜μœ„ μˆ˜μ€€μ˜ κ΅¬ν˜„)에 μ˜μ‘΄ν•˜λ©΄ μ•ˆ 되고, μ—­λ°©ν–₯의 의쑴 관계가 ν˜•μ„±λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 원칙

μž₯점

순방ν–₯으둜 μ˜μ‘΄ν•˜κ²Œ 되면 ꡬ체적인 것(ν•˜μœ„ μˆ˜μ€€)이 μˆ˜μ •λ˜λ©΄ 그보닀 μƒμœ„ μˆ˜μ€€μΈ λͺ¨λ“  κ³„μΈ΅μ—μ„œ μˆ˜μ •μ΄ μΌμ–΄λ‚˜κ²Œ λœλ‹€. ꡬ체적인 것일 수둝 λ³€ν™”κ°€ μž¦μœΌλ―€λ‘œ μ΄λŠ” μ•„μ£Ό λΉ„νš¨μœ¨μ μ΄λ‹€.

μ—­λ°©ν–₯으둜 μ˜μ‘΄κ΄€κ³„λ₯Ό μ„€μ •ν•˜λ©΄ ν•˜μœ„ μˆ˜μ€€μ˜ μˆ˜μ •μ΄ μƒμœ„ μˆ˜μ€€μ— 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šκ²Œ λœλ‹€.

Last updated