들어가며

개발자로써 한 번쯤은 읽으면 좋은 리팩터링 2판(마틴 파울러 저)을 읽으면서 느낀 내용을 정리한 글이에요. 해당 책을 요약한 내용은 아니기 때문에 괜찮다면 따로 한 번 읽어보시면 좋을 것 같습니다.

개요

먼저 이 글을 읽으면서 가장 크게 깨달았던 부분은 좋은 코드에 대한 내용이었었어요

좋은 코드

이 책에서는 좋은 코드를 수정하기 쉬운 코드라고 정의했어요. 수정하기 쉽다라는 것은 여러 가지 의미가 내포되어 있는데 풀어서 얘기하면 다음과 같아요.

  • 코드를 이해하기 쉽다.
  • 중복된 코드가 적다.
  • 코드가 충분히 모듈화되어 있고 주어진 역할이 분명하다.
  • 테스트 코드가 충분하다.

하나 하나 보면 특별할 것 없는 내용이지만 여기서 제가 깨달은 부분은 성능에 대한 것을 완전히 분리했다는 것이었어요.

개발자 취업을 준비하면서 코딩 테스트를 준비하다보니 알고리즘의 시간 복잡도를 줄이는 것에 집착했었어요. 하지만 성능에 집중하면서 작성된 코드를 보면 루프 안에 복잡한 조건식이 들어가고 여러가지 일을 동시에 수행하도록 작성하게 돼요.

이 책에서는 말합니다. 우리가 말하는 성능 최적화는 사실 실제로는 그렇게 큰 의미를 가지지 않으며 먼저 좋은 코드로 리팩터링한 후에 성능 최적화를 따로 수행하는 것이 더 유리하다고 합니다.

이는 실제로도 그랬어요. 리팩터링을 통해 소스 코드를 모듈화하고 하나의 역할을 수행하게 함으로써 성능 프로파일링(기능별 경과 시간 측정)을 더 명확하게 할 수 있고 어떤 기능이 성능 저하의 원인이 되는지 더 쉽게 알 수 있었어요.


또 하나 깨달은 것은 코드에서 나는 악취를 맡을 수 있게 되었고 어떤 방식이 좋은 코드에 까가운지 알게 되었습니다.

코드에서 나는 악취

스스로 작성한 코드를 보면 이해가 잘 됩니다. 그래서 악취가 나는지 모르는 경우가 많아요. 정규 표현식을 쓰거나 복잡한 조건식을 활용한다거나 임시 변수나 인라인한 변수 등 해당 코드를 작성한 사람만 편하게 이해할 수 있는 부분들이 있었어요.

이 책에서는 코드에서 악취가 나는 24가지의 내용들을 소개하는데 책을 읽고나서 제 코드를 다시 보니 악취를 풍기고 있던 것들이 많았습니다. 물론 저는 잘 이해되는 코드였지만 한 번 악취를 맡고나니 수정하고 싶어졌습니다. 수정하는 과정이 그리 간단하지는 않았지만 수정하고 나니 마법이 일어났습니다.

따로 함수로 추출하기 애매했던 중복 코드들을 대부분 제거할 수 있었고 대부분의 주석을 지울 수 있게 되었어요. 가장 놀라웠던 경험은 기능을 수정하는 일이 너무 쉬워졌다는 것과 충분한 테스트 코드 덕분에 수정 코드를 반영하는 것에 불안이 사라졌다는 것이에요.

여기에 덤으로 자주 호출되는 기능을 캐싱하도록 수정하여 성능 개선까지 이루졌어요.


이 책에서 소개하는 리팩터링 아키텍처 애그니 (YAGNI, you aren't going to need it, 지금 필요 없으면 하지 말아라)가 있는데 아키텍처 설계와 리팩터링을 할지 말지에 대한 경계를 파악하는데 도움이 많이 되었어요.

애그니 (YAGNI)

애그니는, you aren't going to need it (지금 필요 없으면 하지 말라), 요구 사항 변경이나 추후에 있을 변경 사항을 대비하여 현재 코드를 복잡하게 하지 말라는 의미로 쓰여요.

저는 이 아키텍처를 지금 소스 코드를 수정하기 쉽게 만드는 것에 주저하지 말라는 의미로도 받아들였어요. 책에서 소개하는 리팩터링 기법들은 서로 상반되는 경우들이 있어요. 지금하는 리팩터링이 나중에는 의미가 없어서 다시 돌려야될 수도 있어요. 중요한 것은 소스 코드를 변경하는 것을 두려워하지 말고 익숙해지는 것에 있습니다.

물론 리팩터링의 목적은 명확합니다. 소프트웨어 개발을 더욱 빠르게 하기 위해서이니 리팩터링으로 인해 시간이 더 오래 걸린다고 판단되면 미루거나 하지 않습니다. 이 부분이 리팩터링을 할지 말지에 대한 미묘한 경계인데, 리팩터링에 대해 익숙해지고 코드에서 나는 악취가 줄어들 수록 이 경계는 조금씩 리팩터링을 하는 쪽으로 움직이게 돼요.


다음 장 부터는 나중에 되집어 보고 싶은 내용에 대해 정리할 예정이에요. 자세한 내용이나 리팩토링의 절차에 대한 내용보다는 이 책의 저자의 소스 코드을 대하는 자세나 생각을 위주로 작성하려고 합니다.

profile
뭐라도 적자

0개의 댓글