중첩 if문으로 가득한 레거시 코드를 전략 패턴으로 리팩터한 경험
졸업 프로젝트에서 할인 정책을 계산하는 함수를 짰는데, 회원 등급·쿠폰 종류·이벤트 여부가 맞물려 조건 분기가 중첩 4단계까지 생겼습니다. 새 정책이 추가될 때마다 어디에 끼워야 할지 저도 헷갈렸습니다.
문제를 인식하고 전략 패턴으로 각 할인 정책을 클래스로 분리했습니다. 할인 적용 순서는 리스트로 관리하고, 각 정책 객체가 자신의 조건과 계산만 담당하게 만들었습니다. 코드 줄 수는 오히려 늘었지만, 새 정책을 추가할 때 기존 코드를 건드리지 않아도 됐고 팀원도 빠르게 이해할 수 있었습니다.
가장 기억에 남는 이유는 리팩터 전후 같은 단위 테스트가 통과한다는 사실을 확인했을 때입니다. 코드를 완전히 다시 쓰면서도 동작이 보존됐다는 검증을 처음 경험했고, 테스트가 없었다면 리팩터를 시도하지 않았을 것이라는 생각이 들었습니다. 그 이후로 테스트를 먼저 쓰는 습관이 시작됐습니다.