--- id: P-REINFORCE-WIKI-DEV-CODE-SMELLS-REFACTORING title: "코드 악취 식별과 구체적 리팩토링 기법 (Code Smells & Refactoring)" category: Dev status: verified canonical_id: "" aliases: ["코드 스멜", "Code Smells", "코드 악취", "리팩토링 기법", "클린 코드"] duplicate_of: "" source_trust_level: A confidence_score: 1.0 tags: ["Clean_Code", "Refactoring", "Maintenance", "Code_Quality", "Design_Patterns"] raw_sources: ["Datacollector_Export_2026-05-02"] last_reinforced: 2026-05-02 github_commit: "" --- # [[코드 악취 식별과 구체적 리팩토링 기법 (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 같은 정적 분석 도구를 적극 활용하여 안전하게 수행. ## 5. 지식 연결 (Related) - [[Refactoring_Principles]]: 리팩토링의 철학적 근거와 상위 원칙. - [[Technical_Debt]]: 악취를 방치했을 때 발생하는 장기적인 비용. - [[SOLID_Principles]]: 악취를 방지하기 위해 지켜야 할 근본적인 설계 원칙. ## 🧪 검증 상태 (Validation) - **정보 상태**: 검증 완료 (Verified) - **출처 신뢰도**: A - **검토 이유**: 코드의 품질을 저해하는 구체적인 패턴을 정의하고, 이를 해결하기 위한 실무적인 대응 방안을 표준화함.