-
-
리팩토링 Refactoring - 코드 품질을 개선하는 객체지향 사고법
Martin Fowler 지음, 김지원 옮김 / 한빛미디어 / 2012년 11월
평점 :
구판절판
최근 화제의 린스타트업에서는 비지니스의 방향을 기존의 "Ready-Aim-Fire" 구조가 아닌 "Ready-Fire-Aim"로의 전환을 이야기 하고 있습니다.
가설을 완벽히 실험하고 검증한후 시장에 출시할 수 없기에 출시한후 실제 시장의 피드백을 반영하는 것인데 해당 가설은 이미 마틴 파울러가 1999년에 쓴 리팩토링 책에 완벽한 설계를 할 수 없고, 완벽한 설계를 한다고 해도 시간에 흐름에 따라 변화가 일어나기에 리팩토링이 필수라는 글을 떠올리게 합니다.
리팩토링은 겉으로 드러나는 기능은 그대로 둔 채, 알아보기 쉽고 수정하기 간편하게 소프트웨어를 수정/구조를 변경 하는 작업으로 정의 됩니다.
책에서 왜 리팩토링을 해야 하는지를 이론으로 설명하려 하지 않고, 바로 책의 첫 부분인 1장 맛보기 예제의 코드를 한번에 하나씩 리팩토링을 하면서 코드 효율성이 높아지고 구조가 체계화되는 모습을 보여줍니다.
해당 예제를 리팩토링 하는 과정을 따라 해보면서 리펙토링의 목적이 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것임을 알게 되며, 몇가지 기법을 바로 배우게 됩니다.
그런데 예제를 리팩토링하는 작업을 완료 하고 보면 분명 코드 효율성과 구조는 체계화 되었으나 성능은 오히려 떨어 질 수 있음을 알게 되는데, 일부 프로그래머들이 리팩토링 자체의 목적이 성능향상을 위한 것으로 오해하지만 사실 리팩토링 작업은 성능 최적화를 위한 것이 아닙니다.
리팩토링을 실시하면 오히려 단기적으로 소프트웨어는 더 느려지지만 리팩토링을 통해 소스의 추가 수정이 용이하게 즉 튜닝이 가능하게 만들어 놓으므로 나중에 속도가 나오게 튜닝할 수 있는 것입니다.
이렇게 장점이 많은 리팩토링이 실제 많이 사용되지 않는 4가지 이유를 13장에서 언급하는데, 바로 현장에서 일어나는 일을 적은 것 같아 이유와 해법을 자세히 적어 봅니다.
1) 리팩토링 방법을 잘 몰라서
사람은 경험하지 않고서는 깨닫지 못합니다. 도구와 기법도 사용할 때나 도움이 됩니다.
리팩토링 방법을 이 책이나 다른 계기로 알게 되고 코드를 리팩토링하면 할수록 더 깊게 넓게 이해하게 됩니다.
가볍고 작은 리팩토링부터 시도해보기를 권장합니다.
2) 리팩토링 장점은 오랜 시간이 흘러야 가시화될 테고, 그때가 되면 프로젝트 팀원도 아닐 텐데 공연히 리팩토링에 힘을 뺄 필요가 없어서
리팩토링하면 단기적인 긍정적 효과를 얻을 수 있고 소프트웨어의 수정과 유지보수가 간편해 집니다. 리팩토링은 목적이 아니고 수단이고, 개인이나 팀이 자신들의 소프트웨어를 개발하고 유지보수하는 다양한 방법중의 하나로 받아 드려야 합니다.
켄드 백 처럼 훌륭한 프로그래머가 "난 뛰어난 프로그래머는 아니고, 단지 습관을 잘 들인 착실한 프로그래머다"라고 자기 암시를 하는 말을 들으며 리팩토링을 습관처럼 해야 훌륭한 프로그래머가 될 수 있을 것 입니다.
3) 코드를 리팩토링 하는 일은 추가적인 부담인데다, 월급은 새 기능을 추가하라고 주는 거지 리팩토링 하라고 주는 건 아니라서
경험상 리팩토링으로 인한 추가 부담은 프로그램의 각 개발 단계마다 줄어든 수고와 시간을 상쇄하고도 남습니다.
4) 리팩토링하다가 괜히 멀쩡한 프로그램을 망가뜨릴까 걱정되서
리팩토링을 하면 이전부터 있던 버그도 쉽게 찾아 수정할 수 있습니다.
정리하면 리팩토링을 하면 소프트웨어 설계 개선되어 이해가 쉬워지고 버그를 찾기가 쉬워집니다.
리팩토링을 통해 빈틈없는 코드를 훨씬 효과적으로 작성할 수 있다.
이는 저자가 리팩토링을 코드를 깔끔하게 만드는 것 이상의 순기능을 하며 소프트웨어 개발 과정의 핵심 요소라고 까지 생각하는 이유라고 할 수 있겠습니다.
이 책에서 리팩토링이 꼭 필요한 시점이나 상황에 대한 정확한 기준을 제시하진 않습니다.
중복코드, 장황한 메서드, 방대한 클래스, 과다한 매개변수 등 자신의 코드나 남의 코드에서 많이 볼 수 있었던 구린내로 표현되는 22가지 리팩토링이 필요한 상태를 제시하고, 해당의 상황에 대해 저자와 주변분들이 몇 년간 수정하고 보완한 리팩토링 목록에서 찾아서 적용해 보면 됩니다.
책에 언급이 되어 있지만 리팩토링에 있어 사람의 직감보다 뛰어난 기준은 없기 때문에 충분한 연습을 통해 감을 잡는 방법 밖에 없습니다.
그러나 이 책을 참고하면 적어도 방향 만큼은 제대로 잡게 될 것입니다.