🔧 리팩토링이란 무엇인가?
리팩토링(Refactoring)은 기능은 그대로 유지하면서 코드의 구조를 개선하는 작업입니다. 즉, 동작은 같지만 더 읽기 쉽고, 더 유지보수하기 쉬운 코드로 바꾸는 과정입니다.
버그를 고치거나 새로운 기능을 추가하는 게 아니라, 코드의 품질 자체를 높이는 것이 목적입니다.
🎯 왜 리팩토링이 필요한가?
- 📌 코드가 길고 중복되어 있을 때
- 📌 변수명이나 함수명이 모호할 때
- 📌 같은 기능이 여기저기 흩어져 있을 때
- 📌 내가 짠 코드를 내가 못 읽을 때
기능은 돌아가지만 불안한 코드는 결국 유지보수 지옥으로 이어집니다. 리팩토링은 이를 미리 방지하는 예방주사입니다.
🪜 리팩토링 기본 원칙
- 작게 바꿔라: 한 번에 많은 걸 바꾸면 오류 찾기 힘듦
- 테스트와 함께 하라: 리팩토링 전후 동작을 비교
- 커밋 단위로 기록하라: 변경 이력을 명확히
- 기능을 바꾸지 마라: 버그 수정은 리팩토링과 별개
📌 자주 사용하는 리팩토링 패턴
1. 긴 함수 → 함수 분리
하나의 함수가 너무 길어지면, 기능별로 나누어 작은 함수로 분리합니다.
// before
function processOrder(order) {
// 1. 유효성 검사
// 2. 가격 계산
// 3. 결제 처리
// 4. 이메일 전송
}
// after
function processOrder(order) {
validate(order);
const total = calculatePrice(order);
processPayment(order, total);
sendEmail(order);
}
2. 중복 제거
동일한 로직이 여러 곳에 있다면 공통 함수로 묶기
// before
if (user.age >= 18) {...}
if (customer.age >= 18) {...}
// after
function isAdult(age) {
return age >= 18;
}
3. 의미 없는 변수명 → 의미 있는 이름
a, b, temp
같은 변수명을 의도가 드러나는 이름으로 바꿔야 합니다.
// before
let x = price * 0.2;
// after
let tax = price * TAX_RATE;
4. Magic Number 제거
코드 안에 3.14159
, 0.8
같은 숫자가 직접 들어가 있으면 나중에 맥락을 알기 어렵습니다.
// before
let area = 3.14 * r * r;
// after
const PI = 3.14159;
let area = PI * r * r;
🧠 리팩토링을 방해하는 습관
- “돌아가니까 괜찮아” 마인드
- 주석으로 떼우기 – 코드가 이해 안 되면 주석이 아니라 구조를 바꿔야 함
- 모든 걸 한 함수에 몰아넣기
- 의식 없는 복사/붙여넣기
리팩토링은 성공적인 코드 습관의 결과물입니다. 결국 읽기 쉬운 코드가 좋은 코드입니다.
🛠️ 리팩토링 도구 추천
- VSCode – 변수명 변경, 코드 정리 단축키
- Prettier – 코드 자동 정렬
- ESLint – 문제 되는 패턴 감지
- Git – 리팩토링 단계별 커밋 기록
- Jest, Mocha – 테스트 도구와 함께 진행
📚 추천 도서
- 리팩토링(Refactoring) – 마틴 파울러
- 클린 코드 – 로버트 마틴
- 읽기 좋은 코드가 좋은 코드다 – 더스틴 보즈웰
🎯 마무리 – 리팩토링은 실력의 기준
초보자는 "코드가 돌아가는 것"을 성공이라 여기고, 중급자는 "코드를 예쁘게 다듬는 것"에 가치를 둡니다.
리팩토링은 단지 멋진 코드가 아니라, 팀원들이 함께 이해하고 확장할 수 있는 기반을 만드는 작업입니다.
오늘부터 작성한 코드 중 가장 마음에 안 드는 부분 하나만이라도 고쳐보세요. 그것이 진짜 개발자 성장의 시작입니다.