관심있는 것들 정리
[리뷰] 리팩터링 2판 본문
리뷰에 앞서 본 리뷰는 한빛 출판 네트워크에서 진행한 ‘나는 리뷰어다’ 이벤트에서 제공받은 책으로 진행한 것을 밝힙니다.
경험상, 프로그램을 작성할 때, 느긋하게 충분한 일정을 가지고, 여러가지 고려해야 할 것들을 다 고려하면서 프로그램을 작성하는 경우는 사실 많지 않았다. 개발 일정을 영업과 기획 부서에서 사업자에 맞는 상품에 맞는 제품 기획 및 일정을 수립하게 되고, 여기에 개발 부서에서 여러 가지 논의를 통해, 언제까지 설계를 하고 코딩을 하며, 블럭테스트, 통합 테스트 및 검증 테스트 그리고 사업자와의 테스트 등등 일정이 세워지고 나면 그 일정에 맞춰 개발을 하게 된다. 하지만 사업자는 이런 저런 이유로 추가적인 기능 요구를 하게 되고, 최대한 사업자 요청 기능을 현재 개발 일정 안에 추가해야 하며, 사업자는 또 사업 일정상 전체 일정에서 1~2개월을 당겨달라는 요구를 하는 경우가 심심하게 발생한다.
프로그램 작성하는 사람은 한정되어 있고, 일정안에 이런 기능 저런 기능을 다 구현하다 보면, 처음에는 코드를 잘 설계해서 중복 코드도 없고, 클래스, 메쏘드, 함수 이름도 보고 이해하기 쉽게 작성을 하려고 꼼꼼히 챙기려 노력하지만, 일정 마감이 가까워지면 그게 마음대로 잘 되지 않는다. 특히 일정에 쫓겨 기능 시험을 하면서 디버깅으로 넣는 코드의 경우는 더욱 더 그러하다.
물론 사람마다의 차이가 있겠지만, 짧은 일정안에 프로그램을 개발해 본 사람들은 공감하는 이야기일 것이라 생각된다. 개인적인 생각일 수는 있겠지만, 그러한 상황에 자주 놓이는 프로그래머에게 이 책은 더욱 더 필요한 책이 아닐까 하는 생각이 든다. 책에서 제시하는 여러가지 패턴을 어떻게 사용할 지 반복해 고민하고 체득함으로써, 빠른 시간 안에 코드를 설계/작성해야할 때 좀 더 좋은 코드를 작성할 수 있도록 말이다.
보통 어떠한 방법론과 같은 책이나, 어떤 이론을 설명해야 하는 책의 경우, 아무래도 좀 따분하고 지루한 면이 있다. 하지만 이 책은 리팩터링 과정을 하나 하나 단계별로 어떻게 리팩터링을 해 나가는 지 예제를 가지고 설명을 하고, 어떤 부분을 어떻게 바꾸는 것이 좋은 지, 상세하게 설명을 하고 있어 전혀 지루한 감이 없다. 처음 저자가 리팩터링을 하는 과정을 따라가다보면, 어느새 이해하기 쉽고, 수정하기 쉬운 코드로 바뀌어 있는 것을 볼 수 있다. 마치 나도 이렇게만 하면 금방 리팩터링을 잘 할 수 있을 것 같은 생각이 들 정도로 말이다.
이 책은 처음부터 끝까지 기능을 하나씩 하나씩 나누어가며 이건 이렇고 저건 이렇고 저건 이렇고 하며 상세하게 설명하는 방식으로 설명하고 있지는 않다. 어떤 방식으로 리팩터링을 하는 지 설명하는 부분과 저자의 경험상 많이 사용하게 되는 패턴을 모아 둔 카탈로그 부분으로 구성이 되어있다. 독자가 내용을 읽어나가며, 이럴 때는 이런 패턴을 적용하고, 이럴 때는 저런 패턴을 적용하여 리팩터링을 해 나가면, 이러한 결과가 나올 수 있다는 것을 약 160페이지(챕터1~4)에 걸쳐 설명을 하고, 각 패턴들은 카탈로그 형태로 찾아볼 수 있도록 나머지에 주제별로 묶어 두었다. 물론 이런 구성이 매번 일일이 패턴을 찾아보는 것이 불편할 수도 있지만, 익숙한 부분은 그냥 넘어가고 필요한 부분만 이해가 안될 때 반복적으로 찾아볼 수 있도록 배려한 것이라는 생각이 들었다. 또 패턴들에 대해 왜 해야하는 지 이유와 어떤 식으로 하면 된다는 간단한 예를 모아둘 수도 있으나, 저자는 각 패턴을 적용할 때, 어떤 절차를 거쳐서 어떻게 적용하면 되는지 설명을 하며, 예제에서 절차별로 어떻게 코드가 바뀌는 지 상세히 설명을 해 두었다. 이러한 구성 덕에, 이 책은 단순히 책을 한 두번 읽고 마는 것이 아닌, 코드를 작성하면서 reference로 언제든 찾아볼 때 유용하게 사용될 수 있다.
저자가 영미권 사람이라 예제 코드나 설명에서 국내 독자들에게 익숙치 않은 표현을 써 둔 부분들이 있는 데, 역자분들이 이 부분에 대해 추가적인 설명 및 유튜브 등에서 찾아 볼 수 있는 링크도 함께 역주로 설명해 주고 있는 부분도 이 책의 장점이라 생각된다.
혹여 이 책에 사용된 예제가 javascript라서 이 책을 이해하는데 어려움이 있지 않을까 생각하는 사람도 있을 수 있다. 하지만, 요즘 자주 사용되는 언어 중 하나라도 익숙한 사람이라면 누구나 이해하는데 문제가 없을 것이라 생각한다.
이 책에 나오는 내용은 한번 보고 이해하는 것으로도 도움이 되기는 하지만, 어떤 패턴을 어떻게 적용할 지 이 책을 참고하면서 많이 고민해가면서 패턴들을 체득해야 더 큰 도움이 될 것이라 생각이 된다. 만약 단계별로 하나씩 따라하는 형태의 책을 원한다면 이 책은 그런 독자가 원하는 책이 아닐 수 있다.