리팩토링 Refactoring (마틴 파울러, 2012) 독후감

2 minute read

리팩토링 카탈로그 부분은 좀 지겹지만, 의사소통을 간편하게 할 수 있는 용어를 배울 수 있다. 안전하게 해당 리팩토링을 할 수 있는 절차를 적어 놓은 게 인상적. 같은 리팩토링이라도 실수를 예방할 방법이 있기 마련이기 때문이다.

테스트가 안 되는 코드를 리팩토링하기는 정말 힘들다. 테스트하지 않고 조심조심 잘하려고 해도 리펑토링(refuctoring)이 되기 십상이다. 리팩토링과 유닛 테스트는 뗄 수 없는 관계이다. “리팩토링을 해야 하는데.” 이런 얘기를 개발하면서 많이 듣는데, 계속 미루거나 혹은 힘들어하는 이유는 바로 유닛 테스트에 익숙하지 않기 때문이다.

리팩토링은 버그를 수정할 때 코드를 좀 더 쉽게 이해하기 위해서 사용된다. 어떤 코드를 이해하려고 할 때, 더 깊은 이해를 위해 리팩토링을 한다. 종종 이런 적극적인 프로세스는 버그를 찾는데 도움을 준다.

p.79

리팩토링을 언제 해야 할까? 해야 할 시점 하나로 ’버그를 수정해야 할 때’를 얘기한다. 이제까지 내가 하던 방법과 완전 다르다. 소스 컨트롤 체인지 로그에 결함이 어디였는지 명확하게 diff로 남기기 위해 모든 유혹을 뿌리치고 딱 그 부분만 고친다. 리팩토링을 하면서 버그를 찾는다니. 한번 생각해 볼 방법이다. 진짜 동작을 안 바꿀 수 있다면 코드를 더 깊게 이해하면서 버그를 발견할 수 있기 때문에 리팩토링도 좋은 방법이다. 하지만 아직까진 망설여지는 게 사실.

“나는 훌륭한 프로그래머는 아니다. 그냥 훌륭한 습관을 가지고 있는 좋은 프로그래머이다.” - Kent Beck

p.77

참 멋진 말이다. 그리고 새겨둘 말이다. 이렇게 말할 수 있는 사람이 몇 명이나 될까? 훌륭한 습관을 지닌 좋은 프로그래머. 목표가 생긴 듯하다.

이 책을 읽기 전 뭐 그냥 리팩토링 카탈로그라고 생각했다. 물론 카탈로그가 있지. 그래서 읽는 걸 미뤄두고 있었는데, 카탈로그에 들어가기 전 글이 좋다. 리팩토링 그 자체에 대해 설명을 하는데, 보고 많은 걸 배웠다.

인상적인 문장

  • 컴퓨터가 이해할 수 있는 코드는 어느 바보나 다 짤 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다. - p35
  • 두 가지 구별된 작업(기능 추가와 리팩토링)을 위해 시간을 나누어야 한다. 기능을 추가할 때는 기존 코드를 건드려서는 안 되고 단지 새로운 기능만 추가해야 한다. 기능을 추가할 때는 기존 코드를 건드려서는 안 되고 단지 새로운 기능만 추가해야 한다. - p74
  • 대부분의 경우, 나는 리팩토링을 위해 별도의 시간을 내는 것에 반대한다. 내가 보기에 리팩토링은 별도의 시간을 내서 할 것이 아니라, 틈틈이 계속 해야 하는 것이다. 리팩토링 자체를 목적으로 삼는 것이 아니라, 어떤 다른 것을 하기 위해 리팩토링을 하는 것이고, 리팩토링은 그 다른 것을 하는 데 도움을 준다. - p78
  • 버그 리포트를 받으면, 그것은 리팩토링이 필요하다는 신호인데, 왜냐하면 버그가 있었다는 것을 몰랐을 정도로 코드가 명확하지 않았다는 뜻이기 때문이다. - p79
  • 컴퓨터 과학은 간접(indirection) 계층을 한 단계 더 만들면 모든 문제를 풀 수 있다고 믿는 학문이다. - Dennis DeBruler - p82
  • 리팩토링을 하는 경우 강조점이 바뀐다. 여전히 사전 디자인(upfront design)은 필요하지만, 궁극적인 솔루션을 찾으려 할 필요는 없다. 그대신 필요한 것은 적절한 솔루션이다. - p89
  • 리팩토링은 확실히 소프트웨어를 더 느리게 할 것이지만, 반면에 소프트웨어에 대한 퍼포먼스 튜닝을 더 쉽게 할 수 있도록 만든다. 엄밀한 실시간 환경을 제외한 모든 영역에서, 빠른 소프트웨어를 만드는 비결은 먼저 튜닝할 수 있는 소프트웨어를 만들고, 그 다음에 충분한 속도를 얻을 수 있도록 튜닝하는 것이다. - p91
  • 리팩토링을 하는 동안 단기적으로는 소프트웨어를 느리게 하지만, 최적화 단계에서는 소프트웨어를 튜닝하는 것을 더 쉽게 한다. 결국에는 이익이 된다. - p92
  • 주석을 써서는 안 된다는 말을 하는 것은 아니니 걱정하지는 말라. 우리의 후각에 의하면 주석이 나쁜 냄새는 아니다. 사실은 달콤한 향기다. 여기서 주석에 대해 말하는 이유는 주석이 종종 탈취제로 사용되기 때문이다. 주석이 잔뜩 붙어 있는 코드를 보면 코드가 서투르기 때문에 주석이 있는 경우가 얼마나 많은가? - p110
  • 패턴과 리팩토링에는 자연스러운 관계가 있다. 패턴은 우리가 있고 싶은 곳이고, 리팩토링은 그곳에 이르는 방법이다. - p133
  • 객체 디자인에서 가장 기본이 되는 것 중의 하나는 책임을 어디에 둘 지를 결정하는 것이다. - p169
  • 내가 수 년간에 걸쳐 사용한 가장 가치 있는 관례(convention) 가운데 하나는 상태를 바꾸는 메소드(수정자)와 상태를 묻는 메소드(질의)를 분리하는 것이다. - p312

PS : 이것도 품절이네. 요즘 보는 책은 다 품절이다. 하긴 이 책을 산 지가 한참 되었지.

Update <2017-12-18 Mon> 표지 사진 교체