리팩토링은 왜 하는 걸까?
리팩토링을 알아보자!
Refactoring is a systematic process of improving code without creating new functionality, that can transform a mess into clean code and simple design.
Code Refactoring
사용하지 않는 코드 또는 중복된 코드를 지우고, 코드의 로직을 깨끗하고 이해하기 쉽게 디자인하는 것 “Code Refactoring” 입니다. “without creating new functionality” 새로운 기능을 만들지 않고, 깨끗한 코드와 간단한 디자인으로 변환하는 것입니다. 코드 가독성 향상 및 복잡성 감소, 성능 향상을 목표로 리팩토링을 배우고 실천해 보는 것이 목표입니다.
처음부터 요구사항에 맞게 설계를 정확히 하고 코드 컨벤션을 만들어서 확장성 있는 개발이 진행되면 좋겠지만, 현실에서 계속 움직이는 프로젝트떄문에 마음대로 되는 것이 없습니다. 더 나은 소스코드를 위해 리팩토링을 왜 해야되는지, 언제 하는 게 좋은지, 또 리팩토링은 어떻게 하는지 방법을 공부하려고 합니다.
Clean Code 🫧
리팩토링의 주요 목적은 기술적 부채와 싸우는 것입니다. 기존 코드를 깔끔한 코드와 심플한 디자인으로 바꿔줍니다.
깨끗한 코드란 무엇일까요?
가독성 - 깔끔하고 명시적인 변수명, 함수명 등으로 다른 사람이 알아보기 쉬운 코드를 작성합니다.
중복 제거 - 중복된 코드 최소화 합니다.
간결성 - 짧고 단순하게 필요한 내용만 유지합니다.
기술적 부채 💸
그렇다면 지저분한 코드는 왜 생기는 것일까요? 비즈니스 압력, 테스트 부족, 문서 부족, 커뮤니케이션 부족 등 여러가지 이유들로 기술적 부채가 쌓이게 되고 점점 이자가 쌓이게 되는 것입니다.
특히, 프로젝트의 요구사항은 끊임없이 변경됩니다. 그런 상황에서 쓰이지 않는 코드가 쌓이고 기존에 있는 함수가 복잡해지면서 이 코드의 방어 코드를 또 작성을 하다보면 의존성이 높은 코드가 생기게 됩니다.
언제 해야할까?
새로운 기능을 만들지 않고 깨끗한 코드와 디자인으로 변환하라고요? 도대체 언제 진행해야되는 걸까요? 리팩토링은 코드를 더 좋게 개선하기 위해서 개발과정에서 수시로 진행을 합니다.
3의 법칙 - 하고 있는 일이 세번째로 반복이 될 때.
기능 추가 - 새로운 기능을 추가하거나 다른 사람의 코드를 수정할 때.
버그 수정 - 버그를 수정할 때.
코드 리뷰 - 동료와 코드 리뷰를 할 떄.
체크리스트
앞에서 계속 언급했듯 리팩토링은 작은 변경으로 진행되어야 합니다. 더 중요한 것은, 기존 코드를 약간 더 좋게 만들어 프로그램 오류가 없이 계속 작동되고 있어야합니다. 리팩토링때문에 잘 작동하고 있던 프로그램이 오작동을 하고, 버그가 생긴다면 당연히 리팩토링을 진행하지 않았던 코드보다 더 끔찍한 일입니다. 성공적인 리팩토링 체크리스트를 가지고 리팩토링 후에 검토를 해보면 좋을 것 같습니다.
✅ 코드가 더 깔끔해졌다. 리팩토링을 했는데 코드가 더 복잡해졌거나 간결해지지 않았다면 리팩토링을 한 의미가 없습니다. 복잡도가 높은 부분이라면 충분한 시간을 가지고 이 코드 전체를 다시 작성을 하는 것이 더욱 좋은 코드를 만들 수 있습니다.
✅ 새로운 기능을 생성하지 않는다. 리팩토링을 할 때는 새로운 기능이 추가되지 않아야합니다.
✅ 기존 테스트를 모두 통과했다. 당연한 결과입니다. 리팩토링 후에 기존이 되던 기능이 동작되지 않는다면 리팩토링을 하지 않는 것이 더 바람직합니다. 리팩토링 후에는 충분한 테스트를 거쳐 기능이 정상작동해야합니다.