한빛미디어 [나는 리뷰어다] 서평단 멤버로 선정되어 작성한 글입니다.


리팩터링 2판

코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기


  • 저자 - 마틴 파울러
  • 번역 - 개앞맵시(이복연) , 남기혁
  • ISBN : 9791162242742
  • 가격 : 35,000원
  • 2020-04-01
  • 한빛미디어



  • 이 책은 전문 프로그래머를 대상으로 쓴 리팩터링 지침서
  • 절제되고 효율적인 방식으로 리팩터링하는 법을 알려주는 것이 목표인 책


  • 20여 년 만에 다시 돌아온 마틴 파울러의 리팩터링 2판 리팩터링 1판은 1999년 출간되었으며, 한국어판은 2002년 한국에 소개되었다. 수많은 독자에게 사랑을 받았으며 리팩터링이란 용어가 프로그래밍 세계에 터를 잡는 계기가 되었다.


1판 출간된 후 18년이 흐른 지금 리팩터링은 무엇이 바뀌었을까? 이번 2판은 거의 모든 페이지가 새로 쓰였지만, 리팩터링의 핵심은 변하지 않았고, 주요 리팩터링 기법들도 여전히 유효하다. 2판이 리팩터링을 효과적으로 수행하는 법을 더 많은 사람이 익힐 수 있는 촉매가 되어줄 것이다.


  • 리팩터링이란?

리팩터링은 겉으로 드러나는 코드의 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식으로 소프트웨어 시스템을 수정하는 과정이다. 요컨대, 리팩터링한다는 것은 코드를 작성하고 난 뒤에 설계를 개선하는 일이다.


  • 다루는 내용

이 책은 전문 프로그래머를 대상으로 쓴 리팩터링 지침서다. 절제되고 효율적인 방식으로 리팩터링하는 법을 알려주는 것이 목표다. 코드에 버그가 생기지 않게 하면서 구조를 더 체계적으로 바꾸는 방법을 설명한다.


  • 누가 읽어야 하나

이 책은 소프트웨어 개발을 직업으로 하는 전문 프로그래머를 위해 쓰였다. 예시와 본문에는 읽고 이해해야 할 코드가 꽤 많다. 예시 코드는 모두 자바스크립트로 작성했지만, 대부분의 언어에 적용할 수 있을 것이다. 이 책의 내용을 쫓아오려면 프로그래밍 경험이 어느 정도 있으면 좋지만 고수가 아니라도 읽을 수 있다.


  • 코딩 스타일이 바뀐다

객체지향 언어의 문법을 익혔다고 저절로 객체지향 프로그래밍을 할 수 있는 게 아니다. 리팩터링 카탈로그를 통해 어떤 코드를 고쳐야 하는지, 왜 고쳐야 하는지, 고친 코드가 왜 좋은지 이해할 수 있다. 이런 과정을 통해 객체지향에 어울리는 코드 디자인을 배우게 되고, 자신의 코딩 스타일도 바뀌게 된다. 이 책을 읽기 전과 후는 코드의 품질에 결정적인 차이가 생길 것이다


  • 1장 : 설계가 아쉬운 작은 프로그램을 리팩터링해서 더 나은 객체 지향 프로그램으로 만드는 과정
  • 2장 : 리팩터링의 일반 원칙, 정의, 당위성 설명 및 리팩터링할 때 생기는 문제점
  • 3장 : 켄트 벡이 도움을 준 내용으로 코드에서 나는 악취를 찾아내는 방법 및 리펙터링을 통해 문제의 부분을 말끔히 제거하는 방법 설명
  • 4장 : 리팩터링에는 테스트가 아주 중요하여 테스트를 작성하는 방법 수록
  • 5장 ~ 마지막 장 : 리팩터링 목록 - 대부분의 개발자가 익혀야 할 필수 리팩터링


목차

img

img

img

img

img

img


img


예시는 자바스크림트로 이루어져있다. 하지만 이 책은 사용하는 언어에 상관없이, 모든 프로그래머를 위해 쓰였다고 한다. 예시코드는 자바스크립트로 구성되어있지민 대부분의 언어에 적용 가능하다. 책이 알차게 구성되어있어 꽤 두께가 있는 편이라서 전부를 읽지않고도 내용 대부분을 습득할 수 있도록 독자의 상황에 따라 추천하는 부분을 넣어놓은 점이 필요한 부분만 딱 골라서 읽을 수 있어 좋았다.


  • 리팩터링이 뭔지 모른다면 1장을 읽자
    • 1장의 예시를 보면 리팩터링 진행 절차를 명확히 알 수 있다.
  • 리팩터링을해야 하는 이유를 모르겠다면 1장과 2장을 읽자.
    • 리팩터링이 무엇이고 왜 필요한지 설명해준다.
  • 리팩터링해야 할 곳을 찾고 싶을 때는 3장을 읽자.
    • 리팩터링이 필요할 만한 곳에서 보내는 신호(악취)를 잡아내는 요령을 설명해준다.
  • 리팩터링을 십슬하고 싶다면 1장부터 4장까지는 꼼꼼히 읽고, 나머지를 빠르게 훑어보자.
    • 카탈로그 부분은 어떤 기법이 있는지 정도만 대략 보면 되고 세세한 부분까지 전부 이해할 필요는 없다. 리팩터링을 당장 실시해야 할 때 해당 기법 부분을 펼쳐 자세히 읽고 따르면 된다.


책을 읽어보니 리팩터링이 어느 부분에서 중요한지에 대한 포인트를 찾아서 정리하였다.


우선 정의부터 !

리팩터링(하다) : [ 동사 ] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.


리팩터링의 중요성

  • 아무리 간단한 수정이라도 리팩터링 후에는 항상 테스트하는 습관을 들이는 것이 바람직.
    • 한가지를 수정할 떄마다 테스트하면 오류가 생기더라도 변경폭이 작아 문제를 찾고 해결하기 쉽다. 조금씩 변경하고 매번 테스트 하는것이 리팩터링의 핵심
    • 리팩터링은 프로그램 수정을 작은 단계로 나눠 진행한다. 그래서 중간에 실수하더라도 버그를 쉽게 찾을 수 있다.
  • 저자의 꿀팁으로는 함수의 반환값에는 항상 result 이름을 쓴다는 것.
    • 변수의 역할을 쉽게 알 수 있기 때문
  • 자바스크립트와 같은 동적 타입 언어를 사용할 때는 타입이 드러나게 작성하면 도움이 된다.
    • 저자는 매개변수 이름에 접두어로 타입이름을 적는데, 매개변수의 역할이 뚜렷하지 않을 때는 부정관사(a/an)을 붙인다고한다.
    • 이름짓기는 중요하면서도 쉽지않은 작업 -> 긴 함수를 작게 쪼개는 리팩터링은 이름을 잘 지어야만 효과가 있다.


리팩터링하는 이유

  • 리팩토링하면 소프트웨어 설계가 좋아진다.
  • 리팩터링하면 소프트웨어를 이해하기 쉬워진다.
  • 리팩터링하면 버그를 쉽게 찾을 수 있다.
  • 리팩터링하면 프로그래밍 속도를 높일 수 있다.


언제 리팩터링해야 할까?

돈 로버츠가 저자에게 제시한 가이드로는,

  • 1) 처음에는 그냥 한다.
  • 2) 비슷한 일을 두 번째로 하게 되면(중복이 생겼다는 사실에 당황스럽겠지만), 일단 계속 진행한다.
  • 3) 비슷한 일을 세 번째 하게 되면 리팩터링한다.
  • 야구를 좋아하는 사람은 ‘스트라이크 세 번이면 리펙터링하라(삼진 리팩터링)’로 기억하자.


리팩터링하지 말아야 할 때

리팩터링을 하면 안되는 상황도 존재한다.

  • 지저분한 코드를 발견해도 굳이 수정할 필요가 없다면 리팩터링 하지 않는다.
  • 리팩터링하는 것보다 처음부터 새로 작성하는게 쉬울 때도 리팩터링 하지 않는다.
    • 리팩터링할지, 새로 작성할지를 잘 결정하려면 뛰어난 판단력과 경험이 뒷받침돼야 함.


img

드림코딩 엘리님의 코딩 잘하는법 (개발자답게 코딩하려면?) 영상


드림코딩 엘리님의 코딩 잘하는법 (개발자답게 코딩하려면?) 영상을 예전에 흥미롭게 봤었는데 그 추천 도서를 한빛미디어로부터 받게되어 뜻깊었다. 사실 코딩을 할 때 아직까지는 리팩터링의 필요성을 느끼지 못했는데, 계속해서 더 좋은 코드를 작성하는 것은 개발자의 숙명인 것 같다는 생각이 들었다. 이 책을 읽으면서 느꼈던 것은 리팩터링 하면 되니까 일단 짜고 생각하자가 아니라 애초에 작성할 때부터 고려해야할 사항을 조금씩 적용하는 것도 중요할 것 같다. 나중엔 리팩토링을 할 필요가 없는 코드를 작성할 수 있도록 ! 파이팅 💪


더 자세한 정보는 한빛출판네트워크에서 확인할 수 있다.