마틴 파울러가 이미 기존에 출간했던 리팩터링이란 책은 워낙 유명한 개발자 바이블이라서 모르는 분들이 없을 것이다. 허나 그 책은 18살이라는 많은 나이를 먹었다. 하지만 리팩토링이라는 근간은 시간이 지나도 달라지지 않았다. 2판은 거의 모든 페이지를 새로 썼지만, 핵심은 거의 변한지 않았다. 리팩터링의 핵심은 똑같고 주요 리팩터링 기법들도 여전히 유효하다. 하지만 2판이 리팩터링을 효과적으로 수행하는 법을 더 많은 사람들이 익힐 수 있는 촉매가 되어 줄 것이다.
리팩터링이란, 코드의 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식으로 소프트웨어 시스템을 수정하는 과정이다. 버그가 생길 가능성을 최소로 줄이면서 코드를 정리하는 정제된 방법이다. 즉, 코드를 작성하고 난 뒤에 설계를 개선하는 일이다.
하지만 우리는 애초에 설계를 잘 해야한다고 배워왔고 그렇게 하려고 많은 시간을 투자하고 있다. 하지만 비즈니스는 멈춰있지 않고 계속 흐르고 변한다. 코드는 점차 수정되고 시스템의 무결성, 즉 설계에 맞춘 구조는 점차 뒤죽박죽이 되어간다. 공학에 가깝던 코딩 작업은 서서히 해키 솔루션으로 도배가 된다. 이렇게 소프트웨어는 점차 부식되어가는데 이 고치는 과정을 리팩터링이라고 한다.
리팩터링을 제대로 알고 싶다면 가장 중요한 1장을 반드시 읽고 이해해야 한다.
- 2장은 리팩터링의 일반 원칙, 정의, 당위성
- 3장은 코드에서 나는 악취를 찾아내는 방법과 리팩터링을 통해 문제의 부분을 말끔히 제거하는 방법
- 4장은 테스트를 작성하는 방법
- 5장 부터는 리팩터링 방법론을 제시하여 사전 처럼 찾아볼 수 있다.
이 책은 예시로 자바스크립트를 선택했지만 사용하는 언어에 상관없이 모든 프로그래머를 위해 쓰여졌다.
자바스크립트의 아주 복잡한 언어 특성은 되도록 사용하지 않고, 자바스크립트를 깊이 알지 못해도 무리 없이 이해할 수 있도록 작성되어 있다.
책을 전부 읽지 않고도 내용 대부분을 습득하려면 아래와 같은 방법을 추천한다.
- 리팩터링이 뭔지 모른다? 1장을 읽자
- 리팩터링해야 하는 이유를 모르겠다? 1장과 2장을 읽자
- 리팩터링해야 할 곳을 찾고 싶다? 3장을 읽자
- 리팩터링을 실습하고 싶다면 1장부터 4장까지는 꼼꼼히 읽고, 나머지를 빠르게 훑자
우리가 리팩터링이 두렵고 쉽사리 도전하지 못하는 이유는 기능에 버그가 생기거나 장애로 이어질까봐하는 두려움일 것 이다. 그래서 리팩터링의 첫 단계는 반드시 리팩터링할 코드 영역을 꼼꼼하게 검사해줄 테스트 코드들 부터 작성해야 한다. 테스트 역할은 굉장히 중요하다. 리팩터링 기법들이 버그 발생 여지를 최소화하도록 구성됐다고는 하나 실제 작업은 사람이 수행하기 때문에 언제든 실수할 수 있다.
그렇기에 리팩터링하기 전에 제대로 된 테스트부터 마련한다. 테스트는 반드시 자가진단하도록 만들어야 한다.
특히 객체 지향 프로그래밍의 상징인 상속은 계륵과 같은 존재라서 설계부터도 고민해야 하지만 이미 너덜너덜 해진 코드를 잘 재조립하는 것이 포인트다. 메서드 올리기/내리기, 필드 올리기/내리기, 슈퍼클래스 추출하기, 서브클래스 제거하기 등에 대한 방법론을 다루고 있다.
이 책은 원서의 웹 버전을 기준으로 진행했기에 추후 웹 원서에 내용이 보강되면 번역자의 깃허브로 내용이 제공된다. https://github.com/WegraLee/Refactoring
https://github.com/WegraLee/Refactoring