본문 바로가기
카테고리 없음

코드 리펙토링 해야할까?

by 준생님 2025. 4. 6.

🔧 리팩토링이란 무엇인가?

리팩토링(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) – 마틴 파울러
  • 클린 코드 – 로버트 마틴
  • 읽기 좋은 코드가 좋은 코드다 – 더스틴 보즈웰

🎯 마무리 – 리팩토링은 실력의 기준

초보자는 "코드가 돌아가는 것"을 성공이라 여기고, 중급자는 "코드를 예쁘게 다듬는 것"에 가치를 둡니다.

리팩토링은 단지 멋진 코드가 아니라, 팀원들이 함께 이해하고 확장할 수 있는 기반을 만드는 작업입니다.

오늘부터 작성한 코드 중 가장 마음에 안 드는 부분 하나만이라도 고쳐보세요. 그것이 진짜 개발자 성장의 시작입니다.

🧼 이 글이 도움이 되셨다면 댓글이나 공유 부탁드립니다!

다음 글에서는 “개발자 생산성 도구 모음 – 내가 매일 쓰는 도구 10가지”를 다룰 예정입니다.