SRP(Single Responsibility Principle)
- SPR를 지키기 위해선 기본적으로 하나의 객체는 하나의 책임만을 가지고 있어야 한다
- 기본적으로 행위를 담당하는 객체 = 액터 라고 생각함
- Service라는 클래스가 있다고 가정
class CustomerService: # 이 코드는 어떨까? 하나의 클래스가 여러 역활을 수행하고 있다 # 예를 들어 결제, 항의, 여러기능들..
def pay(): # 결제 기능 담당
pass
def blame(): # 불만 기능 담당
pass
def process(): # 여러 기능 담당
if pay == False:
self.blame()
return True
- 위의 클래스에서 A부서는 pay를, B부서는 Blame을 담당한다
- 위 클래스는 명확한 책임을 가지고 있는것이 아닌 결제도 담당하고, 불만도 담당하고 여러가지 책임을 가지고 있다.
- 따라서 이러한 클래스는 행위에 대한 사이드 이펙트를 예상하기 어렵고
이상황에서 pay나 blame 를 수정한다면 사용자가 모르는 사이에 다른 기능에 영향을 줄수도 있다.
- 변경에 따른 예상이 쉬워진다가 핵심 이라고 생각함
class PaymentService:
def pay(self):
pass
class BlameService:
def blame(self):
pass
- 위와 같이 책임으로 객체(액터)를 분리해보면
- 객체의 관심도가 밀집해 변화에 따른 예측이 가능해진다
- 결합도가 낮아져 종속도가 줄어든다
- 기능이 작아졌기 때문에 구현이 쉽다
- 종합적으론 객체의 관심도를 응집해 어떤 사이드 이펙트가 일어날지 예측하기 쉽게 만들수 있는게 장점
- 버그가 발생해도 다른 관련 없는 동작에 영향을 미치지 않게 하는것도 목표