[책 후기] 리팩토링 (개정판)

장동혁·2021년 6월 30일
0

서평

목록 보기
2/3

개요

마틴 파울러의 저서 리팩토링이라는 책은 워낙 유명해서 개발자라면 읽지 않았어도 한 번쯤 들어는 봤거나 추천받았을만한 경험이 있을 것이다. 이 책은 몇 년 전 한참 자바를 공부하고 사용했었을 때 중간 정도 읽다가 어려워서 나중에 개발을 더 하다가 읽어야겠다고 합리와 하면서 잊고 지냈던 책이다. 그러던 중 자바스크립트를 주 언어로 사용하게 되었는데 동료 개발자 분께서 리팩토링 개정판이 출간 되었고 설명에 사용되는 언어가 자바스크립트라는 소식에 고민하지 않고 바로 구매를 하게 되었다.

리팩토링

책에서 리팩토링을 정의하는 부분을 보면 외부동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, 소프트웨어를 보다 쉽게 이해하고, 수정하기 쉽도록 만드는 것, 겉으로 보이는 소프트웨어의 기능을 변경하지 않는 것 이라고 되어있다. 소프트웨어는 컴퓨터에 의해 실행이 되어 사용자가 원하는 기능을 제공한다. 소프트웨어를 수정하는 경우는 다양한 이유가 있겠지만 대부분의 경우는 새로운 기능을 추가하거나 기존의 기능을 변경하거나 의도치 않은 버그를 수정하기 위해서이다. 모두 기능과 관련된 수정이지만 리팩토링은 기능의 변경 없이 소프트웨어를 수정한다.

기능의 변경 없이 소프트웨어를 수정하는 이유는 앞서 말한 3가지 작업을 쉽게 하기 위함이다. 간단히 말하면 소프트웨어의 수정을 위한 수정이라고도 말할 수 있다. 소프트웨어는 사용하는 대상이 바뀔 수도 있고 소프트웨어를 사용하는 환경이 바뀔 수도 있다. 소프트웨어는 사용자의 변화하는 요구사항을 충족시키기 위해 계속해서 업데이트 되어야 한다. 그렇기 때문에 소프트웨어는 변화에 유연해야한다.

능력있고 경험이 많은 개발자라면 코드를 작성할 때 자신만의 규칙과 철학이 있을 것이고 코드의 질을 향상시키지 위해 했었던 노력들을 통해 하지만 그렇지 못한(나와 같은) 개발자들에게는 이런 상황에서는 이렇게 하는 것이 좋다.라는 길잡이가 필요하다. 이 책에는 다양한 리팩토링 기법들이 정리되어 있고 모든 상황에 100퍼센트 좋은 방법이라고는 할 수 없지만 어느 정도 가이드라인이 되어줄 수 있을 것 같다.

구성

1장에서는 기능상에는 문제 없지만 여러가지 리팩토링 기법을 적용할 수 있는 예제 프로램이 소개된다. 원래 초판에서는 비디오 대여점의 영수증을 출력하는 프로그램이었는데 극단에서 연극 공연을 할 때 비용을 책정하는 프로그램으로 변경이 되었다. 세월이 흐른 만큼 비디오 대여는 개념에 대해서 잘 모르는 사람들이 있을 수도 있다는 저자의 세심한 배려이다. 단순히 비용을 계산하는 프로그램은 아니고 연극이 희극과 비극이라는 넓은 범위의 장르가 있고 각 장르별 비용책정 정책이 다르다. 이외에도 공연료와 별개로 포인트를 지급해서 다음번 의뢰 시 공연료를 할인받을 수도 있다. 어느정도 복잡도가 있어야 다양한 기법들을 적용해 볼 수 있기 때문에 괜찮은 예시라고 생각했다.

베이스 언어가 자바스크립트인 만큼 공연 데이터는 JSON객체로 주어졌고 프로그램은 한 개의 함수로 구성되어있다. 코드를 파악해보니 기능상에는 문제가 없었지만 (부족한 내가 보더라도) 개선할 수 있는 부분이 많아보였다. 초판과 마찬가지로 1장에서는 해당 프로그램을 다양한 기법을 활용해서 개선해 나가는 과정을 보여주지만 각 기법에 대해서 상세하게 설명하지 않는 대신 해당 기법이 책 뒤의 어떤 부분에서 자세히 다루는지 설명해준다. 이로써 독자는 1장만 읽더라도 리팩토링이 이런 방식으로 진행되는구나 라고 느낄 수 있으며 뒤에 나올 기법들에 대해서 기대감을 심어주기 때문에 좋은 구성이라는 생각이 들었다.

2장에서는 리팩토링에 대한 정의와 함께 언제 리팩토링을 해야되고 리팩토링시 고려할 문제, 프로세스, 성능에 관련된 내용 등 리팩토링이 무엇이고 어떤 특징을 가지고 있으며 고려해야 될 부분에 대해서 상세히 소개한다. 그리고 3장에서는 어떤 코드가 악취(좋지 않음)가 나며 이때 어떤 리팩토링 기법을 사용해야 되는지에 대한 설명이 있고 4장에는 리팩토링에 있어서 필수 요소인 테스트에 대해서 설명한다. 5장에서는 리팩토링 형식에 대한 설명과 기법 선정 기준이 나오고 6장 부터 마지막 장 까지 본격적으로 리팩토링 기법에 대해서 상세하게 다룬다. 역시 유명한 저서 답게 짜임새 있는 구성이라고 생각했다.

느낀점

기능 개발하기에도 바쁘기 리팩토링의 우선순위는 낮은 것이 현실이다. 실제로 리팩토링은 프로그래밍을 하는데 있어서 필수적인 요소는 아니라고 생각할 수도 있다. 하지만 테스트를 작성하고 리팩토링을 진행하게 되면 추후 개발을 하는데 있어서 리팩토링에 투자한 시간보다 더 많은 시간을 아낄 수 있다고 저자는 말하고 있으며 이에 매우 공감한다. 하지만 팀이나 회사에서 이를 이해해주는 분위기가 아니라면 개인의 노력으로는 좀 힘들 수도 있다는 생각이 들었다.

그리고 리팩토링 기법이 워낙 많기 때문에 많은 연습으로 숙달되지 않으면 상황에 따라 적절한 기법을 사용하는게 어려울 것 같으며 서로 반대되는 성격의 리팩토링 기법의 경우에는 더욱더 어렵게 느껴졌다.

마틴 파울러는 기능을 개발할 때와 리팩토링 할 때 서로 다른 모자를 씀으로써 리팩토링을 할 때는 기능개발을 절대 하지 않고 반대로 기능개발을 할 때는 리팩토링을 하지 않는다고 하는데 좋은 아이디어라고 생각한다. 종종 기능개발을 하면서 기존의 코드를 리팩토링 하고싶다는 욕구를 느끼는데 이렇게 되면 기능개발 코드에 리팩토링 작업이 섞이게 되면서 커밋의 의도가 불분명해지기 때문이다. 타입 스크립트 프로그래밍 책 처럼 리팩토링 책도 여러번 반복해서 읽어보도록 노력해야겠다.

profile
기록하는 습관

0개의 댓글