PE Notes · SW
코드 스멜과 리팩토링
산탄총 수술·기능 욕심 같은 스멜을 리팩토링 기법에 매핑하고, 변경 빈도·테스트 유무로 순서를 정한 뒤 정적 분석과 예방 문화를 정리합니다.
당장 깨지지는 않아도, 고칠 때마다 여러 파일을 만지고 이름을 모를 때가 있습니다. 은 그 전조입니다. 버그가 아니라 더 깊은 설계 문제의 냄새입니다. 대응은 동작은 두고 구조만 바꾸는 입니다.
관계·가독성·변경 방지 스멜
관계 쪽은 (한 변경이 여러 클래스를 동시에 건드림), (남의 데이터·메서드를 과하게 씀), 데이터 덩어리(항상 같이 다니는 인자 묶음)입니다. 응집이 낮고 결합이 높다는 신호입니다.
가독성 쪽은 주석 과잉, 마법 숫자, 의미 없는 이름입니다. 숫자를 이름 있는 상수로, 이름을 역할로 바꿉니다.
변경을 막는 스멜은 평행 상속 계층, 역할이 거의 없는 게으른 클래스, 미래를 위해 만든 추상( 위반)입니다. 스멜은 즉시 장애가 아니고, 리뷰와 정적 분석에서 먼저 보입니다.
리팩토링 매핑과 우선순위
긴 메서드는 Extract Method, 신 클래스는 Extract Class·Move Method, 중복은 Extract 또는 Pull Up입니다. 기능 욕심은 그 데이터가 있는 쪽으로 Move Method, 데이터 덩어리는 매개변수 객체, 반복 switch는 다형성으로 바꿉니다.
우선순위는 자주 바뀌는 코드, 신규 인력이 못 읽는 코드입니다. 시험이 없으면 먼저 시험을 붙입니다. 재공학이 시스템을 옮길 때, 리팩토링은 그 안의 모듈을 닦습니다.
| 스멜 | 리팩토링 |
|---|---|
| 긴 메서드 | Extract Method |
| God Class | Extract Class, Move Method |
| 중복 | Extract / Pull Up |
| 기능 욕심 | Move Method |
| 데이터 덩어리 | Introduce Parameter Object |
| Switch 난발 | Replace Conditional with Polymorphism |
탐지 도구와 예방 문화
이 유지보수 이슈로 스멜을 게이트에 올립니다. 언어별 린터가 규칙을 팀 표준에 맞춥니다. 효과는 순환 복잡도, 중복률, 리뷰 시간으로 잽니다.
예방은 컨벤션에 스멜 패턴을 적고, 리뷰 체크리스트에 넣고, 보이스카우트 규칙(발견한 곳을 들어온 때보다 깨끗이)으로 조금씩 갚습니다. 인스펙션이 공식 결함을 모으면, 스멜은 그 전 단계의 유지보수 신호입니다.
답안은 스멜≠버그, 대표 세 유형, 기법 매핑 표, 시험 선행, 게이트 지표를 한 장에 올립니다.