1. 리팩터링: 첫 번째 예시
#
리팩토링 전 코드리팩토링을 하기 전, 공연료 청구서에 들어갈 데이터를 표한한 코드는 다음과 같습니다.
인풋 파일은 다음과 같습니다.
#
코드 문제점물론 짧은 코드라서 바로 확인이 가능하지만. 아래의 부분이 필요합니다.
- 청구 내역을 HTML로 출력하는 기능이 필요합니다.
- 변경 상항이 이후에 들어왔을 때를 고려해서 개발을 해야합니다.
#
리팩토링 전략들어가기에 앞서서, 리팩토링 코드를 적용하는 것은 먼저 테스트 코드를 마련하는 것입니다. 아래 내용에서는 테스트 코드를 미리 작성했다고 가정하고 사용하는 것이 좋습니다.
테스트 코드 프레임워크
- mocha.js
- chai.js
#
중간 리팩터링 코드 적용#
문제점.다음의 내용을 수정했습니다.
- 함수 추출하기
- 임의 변수를 질의 함수로 바꿉니다.
- 변수에 인라인을 적용합니다. (한줄로 표현할 수 있도록)
- 추출 작업이 편해집니다.
- 함수 선언을 바꿀 수 있습니다.
- 필요없는 주석은 제거합니다.
- 반복문을 쪼갭니다.
#
코드앞에서 나온 코드를 쪼갠 결과는 다음과 같습니다.
다만, 아직도 중첩 함수가 존재합니다.
다음 코드의 문제는 다음과 같습니다. 일부 함수를 작게 쪼갰지만, 기능에 대한 분리가 되지 않았습니다. 그리고 중첩 함수가 많은 것을 확인할 수 있습니다. (앞서 진행한 방법은 코드의 구조를 보강하는데 힘을 쓴것입니다. 즉, 골격 개선 작업이였습니다.)
#
다음 수정사항- 반복문을 파이프라인으로 바꿉니다.
- 기능에 따라 두 파일로 나눕니다.
- 다형성을 활용해서 계산 코드를 재구성했습니다. (조건부 로직을 다형성으로 수정합니다.)
- 생성자를 팩토리 패턴으로 수정합니다.
- 함수를 인라인으로 해서 새함수를 직접 호출하도록 수정합니다.
#
최종 코드- 다음 코드는 계산 단계와 포맷팅단계를 분리했습니다.
- 다형성을 통해서 반복문을 줄였습니다.
- 그외에도 여러 수정을 진행했습니다.
#
결론.#
사용된 리팩토링 기법- 함수 추출
- 변수 인라인
- 함수 옮기기
- 조건부 로직 다형성
#
리팩토링의 순서- 원본 함수를 여러개로 나눕니다.
- 단계를 쪼갭니다. (위의 코드에서는 계산과 출력을 나눕니다.)
- 계산 로직을 다형성에 맞게 구성합니다.
#
테스트 코드#
마무리.리팩토링을 통해서 좋은 코드를 구성할 수 있습니다. 좋은 코드를 가늠하는 방법 중 하나는 얼마나 수정하기 쉬운가에 대한 것입니다. 건강한 코드는 생산성을 극대화하고, 고객에게 필요한 기능을 더 빠르고 저렴한 비용으로 제공하도록 해줍니다.