Programing

리팩토링의 원칙과 사례 (Refactoring)

2025. 6. 2. 09:54
반응형

리팩토링이란 무엇인가?

리팩토링(Refactoring)은 기존 코드의 외부 동작은 그대로 유지하면서 내부 구조를 개선하는 작업을 의미합니다. 즉, 기능은 동일하게 유지하면서 코드의 가독성, 유지보수성, 확장성을 높이는 것이 목적입니다.


왜 리팩토링을 해야 할까?

리팩토링은 단순히 코드 정리 이상의 가치를 제공합니다. 다음과 같은 이유에서 반드시 고려되어야 합니다:

  • "코드의 중복 제거"와 같은 품질 향상을 통해 유지보수가 쉬워집니다.
  • "의미 있는 함수명"이나 구조 개선을 통해 협업이 수월해집니다.
  • 미래에 기능을 추가하거나 오류를 수정할 때 발생할 수 있는 문제를 줄입니다.
  • 테스트 자동화와 코드 리뷰가 용이해집니다.

언제 리팩토링을 해야 하나?

리팩토링의 타이밍은 다음과 같은 상황에서 특히 유효합니다:

  • 기능을 새로 추가하거나 수정하려고 할 때 기존 코드가 복잡하거나 이해하기 어려울 경우
  • "조건문 정리"가 필요한 지나치게 분기된 로직이 있을 때
  • 코드 리뷰 중 개선 포인트가 명확하게 드러날 때
  • 테스트를 작성하려는데 코드가 너무 단단하게 묶여 있는 경우

작업 중이나 기능 추가 시 틈틈이 수행하는 것을 권장하며, 반드시 전체 리팩토링을 한 번에 끝내야 하는 것은 아닙니다.


리팩토링을 할 때 주의할 점

리팩토링은 잘못 수행될 경우 기존 기능에 영향을 줄 수 있습니다. 다음 사항들을 반드시 유의해야 합니다:

  • 기능 동작은 그대로 유지해야 합니다 (외부 동작의 변경 금지)
  • 자동화된 테스트나 회귀 테스트를 통해 안정성을 확보해야 합니다
  • 리팩토링 전후에 충분한 커밋 관리 또는 백업이 필요합니다
  • 큰 규모의 리팩토링은 반드시 단계적으로 진행하고, 작은 단위로 쪼개서 적용해야 합니다

리팩토링 전후 코드 비교 사례

예제 1: "중복 제거"

Before

function greetUser(name) {
  console.log("Hello, " + name);
  console.log("Welcome, " + name);
}

After

function greetUser(name) {
  ["Hello", "Welcome"].forEach(msg => console.log(msg + ", " + name));
}

개선 내용

  • 동일한 패턴의 "중복 문자열 조합"을 반복문으로 축약
  • "중복 제거" 원칙에 따라 코드량을 줄이고 유지보수를 간결하게 개선함

예제 2: "의미 없는 함수명 개선"

Before

function doSomething(a, b) {
  return a - b;
}

After

function calculateDiscount(price, discount) {
  return price - discount;
}

개선 내용

  • 함수명과 매개변수명을 바꾸어 "의미 있는 함수명"을 부여함
  • 읽는 사람에게 함수의 용도가 명확하게 전달되도록 개선

예제 3: "조건문 정리"

Before

function getStatus(code) {
  if (code === 200) return "OK";
  else if (code === 404) return "Not Found";
  else if (code === 500) return "Server Error";
  else return "Unknown";
}

After

function getStatus(code) {
  const map = {
    200: "OK",
    404: "Not Found",
    500: "Server Error"
  };
  return map[code] || "Unknown";
}

개선 내용

  • 조건문 대신 "객체 리터럴 맵"을 사용해 가독성 향상
  • 새로운 상태 코드 추가 시 한 줄로 확장 가능

예제 4: "함수 추출"

Before

function handleClick(event) {
  const target = event.target;
  if (target.classList.contains("btn-primary")) {
    target.classList.add("active");
    console.log("Primary button clicked");
  }
}

After

function handleClick(event) {
  const target = event.target;
  if (isPrimaryButton(target)) {
    activateButton(target);
  }
}

function isPrimaryButton(element) {
  return element.classList.contains("btn-primary");
}

function activateButton(element) {
  element.classList.add("active");
  console.log("Primary button clicked");
}

개선 내용

  • 함수 내부 로직을 "함수 추출" 기법으로 분리해 테스트 가능성과 재사용성 향상
  • "단일 책임 원칙"을 반영하여 역할별 분리

마무리 및 추천 자료

리팩토링은 코드 품질을 높이는 가장 실용적인 방법 중 하나입니다. 처음부터 완벽한 코드를 짜는 것은 어렵지만, 반복적으로 개선해 나가는 과정이 중요한 이유입니다.

  • Refactoring Guru
  • freeCodeCamp Clean Code Guide
  • replit JavaScript 실습 환경
반응형

'Programing' 카테고리의 다른 글

엑셀/스프레디시트에서 숫자를 한글로 표기하는 방법 총정리 (Excel to Hangul Conversion)  (4) 2025.06.11
개발 중 자주 만나는 CORS 오류와 해결법 정리 (CORS Error in Web Development)  (0) 2025.06.10
게시판 페이징 처리 (PHP예제)  (1) 2025.05.18
웹 성능 측정 지표 (LCP, FID 등)과 JS 최적화 방법  (0) 2025.04.29
브라우저 렌더링 최적화를 위한 비동기 패턴 정리  (1) 2025.04.29
Form 입력 유효성 검사 및 실시간 피드백 구현 가이드  (0) 2025.04.29
퍼센트 계산, 백분율 계산 방식  (0) 2015.06.11
PHP, MySQL 및 Google 지도를 사용하여 매장 검색기 만들기  (0) 2012.06.13
'Programing' 카테고리의 다른 글
  • 엑셀/스프레디시트에서 숫자를 한글로 표기하는 방법 총정리 (Excel to Hangul Conversion)
  • 개발 중 자주 만나는 CORS 오류와 해결법 정리 (CORS Error in Web Development)
  • 게시판 페이징 처리 (PHP예제)
  • 웹 성능 측정 지표 (LCP, FID 등)과 JS 최적화 방법
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    자바
    jsp
    사고 싶은 책
    iT's MY LiFE
    IT블로그
    위시리스트
    php
    SQL
    js패턴
    읽고 싶은 책
    Java
    블로그
    자바스크립트유틸
    디자인패턴
    IT·컴퓨터
    IT 관련
    기초
    It
    자바스크립트
    JavaScript
Dongkkase
리팩토링의 원칙과 사례 (Refactoring)
상단으로

티스토리툴바