Design Pattern
[DP] SRP
sirius
2021. 3. 18. 10:19
SRP( Single Responsibility Principle ) - 단일 책임 원칙
객체는 단 하나의 책임만 가져야 한다는 원칙을 말한다.
객체지향적으로 설계할 때는 응집도를 높게, 결합도는 낮게 설계하는 것이 좋다.
- 응집도 : 한 프로그램의 요소가 얼마나 뭉쳐있는지, 즉 구성 요소들 사이의 응집력을 말한다.
- 결합도 : 프로그램 구성 요소들 사이가 얼마나 의존적인지를 말한다.
SRP에 따른 설계를 하면 응집도는 높게, 결합도는 낮게 설계할 수 있게 된다.
흔히 함수는 하나의 기능만 수행하도록 구현되어야 하는데,
calculator() 함수가 덧셈, 뺼셈, 곱셈, 나눗셈을 모두 한다면 이는 좋은 설계가 아니다.
덧셈, 뺼셈, 곱셈, 나눗셈이 각각의 함수로 정의되어 있어야 유지보수가 쉽다.
마찬가지로 Calculator 객체가 있을 때, Calculator 객체는 덧셈, 뺄셈, 곱셈, 나눗셈만 할 수 있어야 한다.
즉, 사칙연산에 대한 책임만 갖고 있어야 한다.
이후에 계산기에 알람 기능을 추가한다고 해서, alarm() 함수를 Calculator의 기능으로 추가하는 것은 SRP에 위배된다.
한 객체에 책임이 많아질수록 클래스 내부에서 서로 다른 역할을 수행하는 코드끼리 강하게 결합될 가능성이 높아진다.
즉, 객체마다 책임을 제대로 나누지 않는다면 시스템은 매우 복잡해진다.
왜냐하면 그 객체가 하는 일( 함수)에 변경사항이 생기면 이 기능을 사용하는 부분의 코드를 모두 다시 테스트를 해야 하기 때문이다.
따라서 여러 객체들이 하나의 책임만 갖도록 잘 분배한다면, 시스템에 변화가 생기더라도 그 영향을 최소화 할 수 있기 때문에 SRP 원칙을 따르는 것이 좋다.