토픽 113 / 192·소프트웨어 표준과 법제도
Code Smell (코드 스멜)
Code Smell (코드 스멜)
코드에서 더 깊은 문제(설계 결함, 유지보수 어려움)를 암시하는 표면적인 징후로, 버그는 아니지만 리팩토링이 필요함을 나타내는 신호이며 Martin Fowler의 저서 "Refactoring"에서 체계화됨
목적: 잠재적 문제 조기 발견, 리팩토링 필요성 인식, 코드 품질 향상, 기술 부채 관리
특징: 버그 아님, 설계 문제 징후, 주관적 판단, 리팩토링 대상, 도구로 탐지 가능
대표적인 Code Smell
- •긴 메서드(Long Method): 20줄 이상, 여러 책임, Extract Method로 해결
- •큰 클래스(Large Class): 너무 많은 인스턴스 변수/메서드, Extract Class
- •중복 코드(Duplicated Code): 동일 코드 반복, Extract Method/Template Method
- •긴 매개변수 목록(Long Parameter List): 3개 이상, Parameter Object 도입
- •산탄총 수술(Shotgun Surgery): 한 변경에 여러 클래스 수정 필요, Move Method
- •기능 편애(Feature Envy): 다른 클래스 데이터에 더 관심, Move Method
- •데이터 뭉치(Data Clumps): 함께 다니는 데이터 그룹, Extract Class
- •기본 타입 집착(Primitive Obsession): 기본 타입 남용, Value Object 도입
- •Switch 문(Switch Statements): 복잡한 분기, 다형성으로 대체
- •평행 상속(Parallel Inheritance): 한 클래스 추가 시 다른 클래스도 추가 필요
- •게으른 클래스(Lazy Class): 하는 일 없는 클래스, Inline Class
- •추측 일반화(Speculative Generality): 사용되지 않는 추상화, 제거
탐지 도구: SonarQube, PMD, FindBugs, ESLint, Pylint
장점: 문제 조기 발견, 리팩토링 가이드, 코드 품질 개선
단점: 주관적 판단, 맥락 의존, 과도한 적용 위험
비교: 코드 스멜(설계 징후/리팩토링 대상) vs 버그(기능 결함/수정 대상) vs 취약점(보안 결함/패치 대상)
연관: 리팩토링, 기술 부채, 정적 분석, SonarQube, Clean Code