최근 항해 99를 하면서 최종 프로젝트 지원금을 받았고 리팩토링이라는 책을 샀다. 팀원들과 함께 스터디 하는 방향으로 계획했지만 전체적인 일정이 맞지 않아서 실행하지는 못했다. 다만 이대로 마무리 하긴 아쉬우니 혼자서 진행해보려고 한다. 구매한 책은 아래와 같다.
구매링크 : http://www.yes24.com/Product/Goods/89649360
무언가를 공부하기 위한 책을 읽을 때는 추천사와 도입부를 읽고 시작한다. 여기에는 책의 전반적인 내용과 목표가 기술되어 있다. 따라서 이를 제대로 이해하고 넘어가면 책을 읽을 때 큰 도움이 된다.
추천사의 첫 문단을 읽으면 리팩토링의 중요성을 다음과 같이 역설한다. "코드를 이해하기 쉽고 수정하기 편하게 만드는 것이 중요하며 그 열쇠가 바로 리팩토링이다" 즉 리팩토링은 다른 사람이, 또는 미래의 내가 지금 작성한 코드를 얼마나 쉽게 알아 볼 수 있도록 작성하는가 에 초점이 맞춰져 있다.
다음 문단에서는 리팩토링을 왜 체계적으로 해야하는가 에 대해 설명하고 있다. 리팩토링이란 결국에 기존에 동작하는 코드를 수정하는 것이다. 그 과정에서 기존에 되어야 하는 기능이 되지 않거나, 되선 안되는 케이스가 되는 경우가 발생할 수 있다. 또 A를 수정했는데 그와 의존성이 있는 B를 수정해야하고, 또 C를 수정해야 하고, 그러한 과정에서 복잡도가 더 높아지는, 오히려 더 안좋아지는 케이스도 발생한다. 이러한 문제를 예방하기 위해 리팩토링 책에서는 프로세스를 단계 별로 제공하며 체계젹으로 할 수 있도록 도와준다.
이 책에서 리팩토링의 정의를 다음과 같이 한다. "리팩토링은 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식으로 소프트웨어를 수정하는 과정"이다. 여기서 중요한 것은 이미 기능은 구현되어 있다는 것이다. 이 점은 설계 후 코딩이라는 기본적인 내용에 반하는 것인데 왜 리팩토링을 중요하게 생각하는 것일까?
핵심은 코드는 시간이 지나면서 점점 수정되고 당시에는 최선이라 생각했던 방식이 더 나은 방식으로 바꿔야 할 케이스도 있다. 즉 프로그램은 계속해서 수정되어야 하고 그때마다 '재설계 - 코딩'은 효율이 좋지 않으며 복잡도가 높은 프로그램의 경우, 해킹하는 수준으로 코드를 탐색해야 한다.
그렇다면 초기에 완벽한 코드를 작성하는 것보다 어떻게 하면 효과적으로 코드를 수정해나갈 수 있을까?를 고민하는 것이 맞지 않나?라는 의문에서 리팩토링은 시작됐다. 따라서 리팩토링은 구현-수정-구현-수정... 의 싸이클을 반복한다.
책에 도입부에서는 효과적인 공부 방식?? 책 읽는 순서??를 제시했다.
책에서 제시한 내용을 보면 전반부(1~4장), 후반부(5~12장)로 나뉘는 것을 볼 수 있다. 1장~4장의 챕터 명을 살펴보면 아래와 같다.
즉 전반부는 본격적인 리팩토링을 하기 전에 기존의 코드를 분석하는 과정이라 볼 수 있다. 내 코드의 어느 부분이 문제가 있다! 를 알아야 고칠 수 있는 것이다.
그리고 후반부는 단계별, 파트별로 리팩토링하는 과정을 설명한다. 따라서 전반부를 통해 내 코드르 분석하고 리팩토링 해야 하는 부분을 찾아 후반부에서 필요한 부분을 찾아 리팩토링을 진행하는 것이 책에서 제시한 공부방법? 책 읽는 방법?이다.
나는 리팩토링의 전반적인 내용을 모두 학습하고 싶다. 따라서 1장부터 4장까지 꼼꼼히 보고 5장부터 마지막까지를 가볍게 훑어보는 방식으로 공부할 것이다. 그 후 내가 했던 프로젝트 중 하나를 선택해 리팩토링을 진행해볼 것이다. 관련 코드는 아래의 깃허브에 정리해둘 것이다.
아자아자 화이팅!!!