Files
2nd/10_Wiki/Topics/Code_Smells_Refactoring.md
T
2026-05-02 23:33:34 +09:00

3.6 KiB

id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, tags, raw_sources, last_reinforced, github_commit
id title category status canonical_id aliases duplicate_of source_trust_level confidence_score tags raw_sources last_reinforced github_commit
P-REINFORCE-WIKI-DEV-CODE-SMELLS-REFACTORING 코드 악취 식별과 구체적 리팩토링 기법 (Code Smells & Refactoring) Unified verified
코드 스멜
Code Smells
코드 악취
리팩토링 기법
클린 코드
A 1.0
Clean_Code
Refactoring
Maintenance
Code_Quality
Design_Patterns
Datacollector_Export_2026-05-02
2026-05-02

코드 악취 식별과 구체적 리팩토링 기법 (Code Smells & Refactoring)

1. 개요

코드 악취(Code Smells)는 프로그램의 작동에는 문제가 없으나, 내부 구조상 잠재적인 결함이나 유지보수의 어려움을 시사하는 징후들이다. 이러한 악취를 조기에 식별하고 적절한 리팩토링 기법을 적용함으로써 기술적 부채의 누적을 막고 코드베이스의 건강함을 유지할 수 있다.

2. 코드 악취의 주요 유형 (Smell Categories)

  • 비대화 (Bloaters): 너무 커져서 다루기 힘든 코드. (예: 거대 클래스, 긴 메서드, 데이터 뭉치)
  • 객체지향 오용 (OO Abusers): 객체지향 원칙을 잘못 적용. (예: 복잡한 Switch 문, 상속 거부)
  • 변경 방해 (Change Preventers): 한 곳을 고치기 위해 여러 곳을 수정해야 함. (예: 산탄총 수술, 분기되는 변경)
  • 불필요한 요소 (Dispensables): 없어도 되는 코드. (예: 죽은 코드, 중복 코드, 불필요한 주석)
  • 잘못된 결합 (Couplers): 클래스 간 과도한 의존. (예: 기능 편애, 메시지 체인)

3. 핵심 리팩토링 기법 (Refactoring Techniques)

  • 메서드 정리: 메서드 추출(Extract Method), 메서드 인라인화(Inline Method) 등을 통해 논리의 단위를 명확히 함.
  • 객체 간 책임 이동: 메서드 이동(Move Method), 필드 이동(Move Field) 등을 통해 관련 있는 데이터와 로직을 한데 모음(응집도 향상).
  • 데이터 조직화: 매직 넘버를 상수로 교체(Replace Magic Number), 필드 캡슐화(Encapsulate Field) 등을 통해 데이터 접근 통제.
  • 조건부 로직 단순화: 조건문 분해(Decompose Conditional), 다형성을 활용한 조건문 교체(Replace Conditional with Polymorphism) 등을 통해 복잡한 분기 제거.
  • 일반화 처리: 필드 상향(Pull Up Field), 메서드 상향(Pull Up Method) 등을 통해 중복되는 공통 로직을 상위 클래스로 이동.

4. 실전 적용 전략

  • 보이스카우트 규칙: 캠핑장을 떠날 때 처음보다 더 깨끗하게 치우듯, 코드를 수정할 때 주변의 사소한 악취를 하나씩 제거.
  • 테스트 커버리지 확보: 리팩토링 중 기존 기능이 파손되지 않았음을 보장하기 위해 단위 테스트가 선행되어야 함.
  • 도구 활용: IDE의 리팩토링 자동화 기능(Rename, Extract 등)과 SonarQube 같은 정적 분석 도구를 적극 활용하여 안전하게 수행.

🧪 검증 상태 (Validation)

  • 정보 상태: 검증 완료 (Verified)
  • 출처 신뢰도: A
  • 검토 이유: 코드의 품질을 저해하는 구체적인 패턴을 정의하고, 이를 해결하기 위한 실무적인 대응 방안을 표준화함.