리팩터링 2판
리팩터링 2판. : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기
약 500장의 두꺼운 기술서적을 3개월의 시간을 투자해 1회독 했습니다. 개발자 필독서라고 하면 빠지지 않고 올라오는 도서라 도대체 무슨 내용이기에 다들 입을 모아 좋다고 하는지 궁금했거든요. 다행히도 리팩터링 2판은 예시가 JS로 쓰여있어서 더 읽을만 했던 것 같습니다. JAVA로 쓰여있었던 클린코드(로버트 C. 마틴의 책)는 나중엔 조금 휘뚜루 마뚜루 읽어내려갔던 경험이 있었는데 리팩터링은 코드를 꼼꼼히 살펴보며 읽을 수 있었습니다.
그래서 이 책을 읽고 뭔가 달라졌나요?
사실 왕초보 개발자 시절부터 '리팩터링'이라는 말은 자주 써왔었습니다. 그렇지만 지금까지 시니어와 함께 일해본 경험이 없어서 내가 하고 있는 것이 맞는 건지, 어떻게 보면 귀찮고 사소한 작업인데 꼭 해야하는지, 어떤 이유를 들어서 리팩터링을 하도록 팀원을 설득할 수 있을지 등에 대한 고민이 있었는데요. 이 책을 읽으면서 리팩터링에 대한 이유와 방법에 대해서 조금 더 명확하게 이해할 수 있었습니다. 가장 큰 변화는 지금까지 회사에서 잘못 사용하고 있었던 '리팩터링'에 대한 개념을 바로잡을 수 있었습니다.
- refact: {
- description:
- '기존 로직 수정, 코드 형태 변경, 코드 재구성 등을 포함한 리팩토링',
- title: 'refact',
- },
+ refact: {
+ description:
+ '동작은 동일하나 내부 로직이 변경된 리팩토링',
+ title: 'refact',
+ },
사내에서 쓰는 커밋 템플릿 라이브러리의 정의를 위와 같이 바꾸었어요. 이전에는 무에서 유를 만들면 feature고, 이미 있는 것을 수정하면 리팩터링이라고 생각했었는데 리팩터링에 대한 의미가 명확해졌습니다.
그리고 책에 나오는 예시 코드들을 보면서 커밋을 좀더 세부적으로 가져가는 연습을 시작했습니다. 눈에 보이는대로 고친 후에 뭉뚱그려서 커밋을 하곤 했었는데 이젠 리팩터링 기법을 하나하나 생각해보며 커밋을 작성하고 있습니다.
책에서 내내 컴파일 -> 테스트 -> 커밋
과정을 강조하는데 덕분에 테스트 코드를 작성하는 것에 대한 관심도 생겼습니다. 리팩터링에 선행되어야하는 것은 테스트코드라는 것을 알 수 있었어요. 이 내용들을 잘 전파해서 5~6월엔 사내 테스트코드 스터디도 진행할 수 있었답니다 :)
책을 읽고 나서 달라지지 않은 부분도 있습니다.
코드리뷰를 할 때, '이게 리팩터링 예제 코드 였다면 십중팔구 마틴 파울러 선생님께서 고치셨을텐데...'라고 생각한 부분이 종종 있습니다. 이러저러한 이유로 고치는 게 좋겠다고 리뷰를 달지만 팀원들을 충분히 설득시키지 못하는 이유일 때가 많아서 매번 아쉬움이 남는데요. 책을 읽고 나서도 명확한 이유를 들어서 리팩터링을 하도록 설득하는 것은 여전히 어렵습니다. 클래스, 상속, 인터페이스 등 객체지향적인 부분에 대해서는 아직도 많이 부족하다는 것을 느꼈습니다. 솔직히 이해되지 않아서 빠르게 넘긴 챕터들도 있습니다. 아직 회사에서 쓰는 코드에도 그런 부분들은 많이 없다보니 실전에서 연습해 볼 일도 많이 없었는데 언젠간 클래스를 활용해서 피쳐를 만들어보는 연습을 해보아야겠네요. 아직도 객체지향 패러다임은 낯선 부분이 많습니다.