오늘은 저번 시간에 실습했던 코드 기능 명세, 테스트 우선 개발을 중심으로 코드를 리팩터링 해보는 시간을 가졌다. 이 강의에서는 Javascript를 사용하지만 내가 python으로 해석하면서 따라했다.
흔히들 그냥 원래 있던 코드를 다른 코드로 바꾸는 것을 리팩터링이라고 오해하고 있다.
코드를 리팩터링한다는 것은 코드로 만들어진 객체를 더 작거나 단순한 객체들로 나눠서 표현하는 것이다. 즉, 원래의 의미를 훼손하지 않으면서 구조를 바꾸는 것이 리팩터링이다.
여기서 문제가 하나 생긴다. 그 코드가 가진 의미를 어떻게 유지할 것인가.
다양한 목적을 가지고 코드를 바꾸게 되는데 많은 프로그래머는 리팩터링 후 의미가 변했는지 확인도 안한다. 위험한 행위다.
그렇다면 리팩터링 할 때 코드의 의미를 어떻게 확인해야 할까?
그건 바로 테스트다. 수동 테스트 / 자동화 테스트 / 인수 테스트 등 테스트로 확인하면 된다.
리팩터링 작업을 따라했을 때, 이전과 비교하면 중복된 코드가 없어지고 가독성도 많이 좋아졌다.
처음 실습했던 코드는 리팩토링하면서 의미가 변경되었는지 매번 수동 테스트로 확인하는 불편함을 경험했다. 반대로 마지막에 했던 코드는 이전에 만들어놓은 자동화 테스트만 실행해서 받은 피드백으로 간단하게 운영코드만 수정했다.
이처럼 수동 테스트와 자동화 테스트를 둘 다 사용해 봤는데 수동 테스트는 규모가 큰 프로젝트에는 하기 힘들 것 같다고 느꼈다. 자동화가 짱이다.