SRP, 단일 책임 원칙

hyeok ryu·2023년 5월 15일
2

SOLID

목록 보기
2/2
post-thumbnail

개요

객체는 단 하나의 책임만 가져야 한다.
모든 모듈이 단 하나의 일만 해야한다는 의미가 아니다.
단 하나의 일만 해야하는 원칙을 가지는것은 따로 있다.
바로 함수.

SPR : 하나의 모듈은 오직 하나의 액터에 대해서만 책임져야 한다.

예시

  • calculatePay() : 회계팀에서 사용
  • reportHours() 인사팀에서 사용
  • save() : DBA가 사용

개발자가 Employee라는 단일 클래스에 함수를 모두 배치하여 액터가 서로 결합되었다.

Case1.

가정.

calculatePay()가 reportHours()와 초과 근무를 제외한 업무 시간을 계산하는 로직을 공유한다.
회계팀에서 초과 근무를 제외한 업무 시간을 꼐산하는 방식을 수정했다고 하자.
인사팀에서는 초과 근무를 제외한 업무 시간을 회계팀과 다른 목적으로 사용하기 때문에 변경을 원하지 않는다.

결과

개발자는 회계팀의 요청에 따라 함수를 수정한다. 그리고 테스트 후 배포한다.
인사팀은 그 사실을 알지 못하고 있다가 추후에 큰 문제가 생겼다는 사실을 알게된다.
즉. 서로 다른 액터가 의존하는 코드를 너무 가까이 배치했기 때문이다.

해결

메서드를 각기 다른 클래스로 이동 시킨다.

위와 같은 방식으로 수정을 한다. 3개의 클래스는 서로의 존재를 알 수 없다.
다만, 이러한 방식으로 수정시 3가지 클래스를 인스턴스화하고 추적해야한다.

이럴경우, 파사드 패턴을 이용하여 해결할 수 있다.

파사드 패턴
Facade는 프랑스어로 건물의 정면을 의미한다.
즉. 뒷부분이 어떻게 구현되어있는지 보여주지 않고, 어떤 메서드가 있다는것만 보여준다. 각각의 구현은 하위 클래스에서 구현한다.

0개의 댓글