SOLID

박종범·2024년 9월 28일
0

SOLID 법칙?

로버트 C. 마틴이 고안한 5가지 좋은 설계를 위한 원칙으로, 각각의 원칙 SRP, OCP, LSP, ISP, DIP의 앞글자를 따서 SOLID 법칙이라 불리웁니다. 그 5가지는 아래의 표와 같아요.

PrincipleFull nameDescription
SRPThe Single Responsibility PrincipleA class should have one, and only one, reason to change.
OCPThe Open Closed PrincipleYou should be able to extend a classes behavior, without modifying it.
LSPThe Liskov Substitution PrincipleDerived classes must be substitutable for their base classes.
ISPThe Interface Segregation PrincipleMake fine grained interfaces that are client specific.
DIPThe Dependency Inversion PrincipleDepend on abstractions, not on concretions.

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

단일 책임 원칙 SRP (Single Responsibility Principle)

하나의 모듈은 하나의, 오직 하나의 액터에 대해서만 책임져야 합니다.
A module should be responsible to one, and only one, actor.

시스템에서 어떤 모듈이나 클래스를 사용하게 될 액터가 몇명인지를 확인할 것
즉, 단일 책임 원칙에서 책임은 액터에 대한 책임이에요.

Actor란?

메시지를 전달하는 주체..
같은 방식으로 변경되기를 원하는 사용자나 이해관계자들을 의미해요

단일 책임 원칙을 위반하는 징후들?

징후1: 우발적인 중복

Employee Class
급여 애플리케이션에서 위와 같이 Employee 클래스가 있다고 가정해봅시다.
그런데, 이들 세 가지 메소드가 서로 다른 세 명의 액터를 책임지기 때문에, SRP를 위반하는 사례예요.

메소드기능정의 주체목적
calculatePay회계팀CFO 보고
reportHours인사팀COO 보고
saveDB관리자 (DBA)CTO 보고

예시

  • regularHours 초과근무를 제외한 업무시간을 계산하는 알고리즘을 개발하였음
  • regularHourscalculatePayreportHours에서 사용됨

그런데, CFO팀에서 regularHours를 바꿨다면???
reportHours에서 이용되는줄은 모르고 바꾼거라서 reportHours에서 엉망으로 나타난다!!

징후2: 병합

목표

  • 클래스가 변경됐을 때 영향을 받는 액터가 하나여야 한다.
  • 클래스를 변경할 이유는 유일한 액터의 요구사항이 변경될 때로 제한되어야 한다.

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

You should be able to extend a classes behavior, without modifying it.

리스코프 치환 원칙 LSP (Liskov Substitution Principle)

Derived classes must be substitutable for their base classes.

인터페이스 분리 원칙 ISP (Interface Segregation Principle)

Make fine grained interfaces that are client specific

의존성 역전 원칙 DIP (Dependency Inversion Principle)

Depend on abstractions, not on concretions.

0개의 댓글