λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
IT

[객체지ν–₯ 섀계] Solid 원칙

by πŸ’²πŸŽ΅βœ–οΈβœ”οΈβ˜Ό 2022. 11. 3.
728x90

SOLID 원칙

SOLID 원칙 μ†Œκ°œ

SOLIDλŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°κ³Ό 섀계에 μ μš©λ˜λŠ” λ‹€μ„― 가지 κΈ°λ³Έ 원칙을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λŸ¬ν•œ 원칙듀은 λ‘œλ²„νŠΈ λ§ˆν‹΄κ³Ό 마이클 νŽ˜λ”μŠ€μ— μ˜ν•΄ μ†Œκ°œλ˜μ—ˆμœΌλ©°, μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ 더 효율적이고 μœ μ§€λ³΄μˆ˜ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“€κΈ° μœ„ν•œ λͺ©μ μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.

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) - μ˜μ‘΄μ„± μ—­μ „ 법칙

좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•˜λ©°, ꡬ체화에 μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€. μƒμœ„ ν΄λž˜μŠ€λŠ” ν•˜μœ„ ν΄λž˜μŠ€μ— μ’…μ†λ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

SOLID 원칙 적용 μ˜ˆμ‹œ

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) - μ˜μ‘΄μ„± μ—­μ „ 법칙

μ˜μ‘΄μ„±μ€ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•©λ‹ˆλ‹€. μƒμœ„ μˆ˜μ€€ λͺ¨λ“ˆμ€ ν•˜μœ„ μˆ˜μ€€ λͺ¨λ“ˆμ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ , λ‘˜ λͺ¨λ‘ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ SOLID 원칙을 μ μš©ν•¨μœΌλ‘œμ¨ μ½”λ“œμ˜ 가독성, μž¬μ‚¬μš©μ„±, μœ μ§€λ³΄μˆ˜μ„±μ΄ ν–₯μƒλ˜κ³ , μ‹œμŠ€ν…œμ΄ 변화에 λŒ€μ‘ν•˜κΈ° μ‰¬μ›Œμ§‘λ‹ˆλ‹€.


참고자료:

λŒ“κΈ€