리팩터링 (refactoring)

컴퓨터과학·AI
한 줄 정의: 겉으로 드러나는 동작은 그대로 둔 채 코드의 내부 구조만 개선하는 작업입니다.

쉽게 풀면

기능을 새로 추가하거나 버그를 고치는 것이 아니라, 같은 일을 하는 코드를 더 읽기 쉽고 고치기 쉽게 다듬는 일입니다. 긴 함수를 쪼개거나 이름을 분명하게 바꾸거나 중복을 없애는 식이지요. 겉에서 보면 아무것도 달라지지 않아야 하고, 그것을 확인해 주는 것이 테스트입니다.

왜 중요한가

소프트웨어는 오래 살아남으며 계속 바뀌기 때문에, 구조를 정리하지 않으면 변경 비용이 점점 커집니다. 리팩터링은 기술 부채를 갚아 변경 속도를 유지하는 일상적 수단입니다. 작은 단계로 나누어 안전하게 구조를 바꾸는 방법을 체계화했다는 점에서 소프트웨어공학의 중요한 실천 지식입니다.

논문에서는 이렇게 쓰입니다

"기능 추가에 앞서 중복 로직을 추출하는 리팩터링을 선행하여 변경 범위를 국소화하였다."

새 기능을 넣기 쉬운 구조로 먼저 정리한 뒤 작업했다는 뜻입니다.

조금 더 깊게 보면

마틴 파울러가 정리한 함수 추출, 변수 인라인, 조건문을 다형성으로 대체하기 같은 이름 붙은 절차들이 표준 어휘로 쓰입니다. 각 절차는 아주 작은 단계로 쪼개져 있어 매 단계마다 테스트를 돌려 동작 보존을 확인할 수 있고, 이 점이 그냥 코드를 뜯어고치는 일과의 결정적 차이입니다. 현대 통합 개발 환경은 이름 바꾸기나 함수 추출 같은 조작을 자동으로 수행해 사람의 실수를 줄여 줍니다.

주의할 점

기능 변경이나 성능 최적화를 함께 하면 문제가 생겼을 때 원인을 가릴 수 없으므로, 반드시 분리해서 진행해야 합니다. 개선이 필요하다는 신호를 알아채는 일과 실제로 구조를 바꾸는 행위 자체는 구분해서 다루어야 합니다.

관련 용어