어느덧 프리온보딩도 3/4만큼 진행했다. 여섯번째 과제는 이전의 과제들보다 비교적 도전적인 과제가 출제되었다. 전동킥보드 공유서비스를 운영하는 디어코퍼레이션의 과제였는데, 자유도가 꽤 높고 약간의 창의성도 요구되었다. 여러 할인 혜택과 벌금이 추후 추가되거나 변경되거나 할 수 있는 데, 어떻게 시스템 설계를 해야 확장성에 도움이 될지 고려해야 했다.
성연 팀원님께서 책임연쇄패턴
을 활용해서 확장성을 향상시켜보자는 의견을 주셨다. 우리 팀이 활용하는 express
프레임워크에서 영감을 받았는데, express
의 경우 일련의 연속된 미들웨어 함수 호출로 이루어져 중간 중간에 여러 작업을 끼워맞출 수 있다. 이처럼 중간중간 체인 구조로 끼워넣을 수 있는 구조를 만든다면, 할인이나 벌금 같은 조건들이 추가/변경/삭제 되더라도 유연하게 대처할 수 있을 거라 생각했다.
이를 위해 체인 전체를 관리하는 매니저 역할을 하는 CostChainManager
클래스와, 요금 계산을 위한 체인들의 추상 클래스 역할을 할 CostChainBase
클래스를 두었다.
CostChainManager.js
CostChainBase
이후 도메인 별로 역할을 나누어 작업을 진행했다. 나는 기본 요금 파트를 담당하였다. class를 상속받아 코드를 작성하는 걸 실제 프로젝트에서 적용해 본 적이 없는데, 좋은 공부가 되었다.