Robert C. Martin에 따르면 SRP는 다음과 같이 말합니다.
수업 이 바뀌어야 하는 이유는 하나 이상이어야 합니다.
그러나 그의 책 Clean Code , 3 장 : Functions에서 다음 코드 블록을 보여줍니다.
public Money calculatePay(Employee e) throws InvalidEmployeeType {
switch (e.type) {
case COMMISSIONED:
return calculateCommissionedPay(e);
case HOURLY:
return calculateHourlyPay(e);
case SALARIED:
return calculateSalariedPay(e);
default:
throw new InvalidEmployeeType(e.type);
}
}
그리고 다음과 같이 말합니다.
이 기능에는 몇 가지 문제가 있습니다. 첫째, 규모가 크며 새로운 직원 유형이 추가되면 커질 것입니다. 둘째, 그것은 하나 이상의 일을 매우 명확하게 수행합니다. 셋째, SRP (Single Responsibility Principle)가 하나 이상의 변경 이유가 있기 때문에 SRP를 위반합니다 . [강조 광산]
첫째, SRP가 클래스에 대해 정의되었다고 생각했지만 함수에도 적용 가능하다는 것이 밝혀졌습니다. 둘째로,이 함수 는 어떻게 변경 해야합니까? 직원이 변경되어서 만 변경되는 것을 볼 수 있습니다.