//
Search
🦨

코드의 냄새

생성일
2023/10/28 13:56
Description
태그
개발
숙력된 사람의 직관만큼 코드의 냄새를 맡는 정확한 기준은 없다.

1. 기이한 이름 Mysterious Name

함수 선언 바꾸기
변수 이름 바꾸기
필드 이름 바꾸기
이름만 잘지어도 문맥을 파악하느라 해맬 시간을 크게 절약할 수 있다.

2. 중복 코드 Duplicated Code

함수 추출하기
문장 슬라이드하기
메서드 올리기

3. 긴 함수 Long Function

코드를 이해하고, 공유하고, 선택하기 쉬워진다는 장점은 함수를 짧게 구성할 때 나오는 것이다.
→ 하지만, 결국 함수 이름을 잘 지어놓으면 본문 코드를 볼 이유가 사라짐
함수 추출하기
임시 변수를 질의 변수로 바꾸기
매개변수 객체 만들기
객체 통째로 넘기기
함수를 명령으로 바꾸기
조건문 분해하기
조건문을 다형성으로 바꾸기
반복문 쪼개기

4. 긴 매개변수 목록 Long Parameter List

매개변수를 질의함수로 바꾸기
객체 통째로 넘기기
매개변수 객체 만들기
플래그 인수 제거하기
여러 함수를 클래스로 묶기

5. 전역 데이터 Global Data

변수 캡슐화하기

6. 가변 데이터 Mutable Data

변수 캡슐화하기
변수 쪼개기
문장 슬라이드하기 & 함수 추출하기
질의 함수와 변경 함수 분리하기
세터(setter) 제거하기
파생 변수를 질의 함수로 바꾸기
여러 함수를 클래스로 묶기
여러 함수를 변환 함수로 묶기
참조를 값으로 바꾸기

7. 뒤엉킨 변경 Divergent Change

뒤엉킨 변경은 단일 책임 원칙(Single Responsibility Principle)이 제대로 지켜지지 않을 때 나타난다.
단계 쪼개기
함수 옮기기
함수 추출하기
클래스 추출하기

8. 산탄총 수술 Shogun Surgery

산탄총 수술은 뒤엉킨 변경과 비슷하면서도 정반대다.
함수 옮기기
필드 옮기기
여러 함수를 클래스로 묶기
여러 함수를 변환함수로 묶기
단계 쪼개기
함수 인라인하기
클래스 인라인하기

9. 기능 편애 Feature Envy

함수 옮기기
함수 추출하기
전략패턴
위임자 패턴

10. 데이터 뭉치 Data Clumps

클래스 추출하기
매개변수 객체 만들기
객체 통째로 넘기기

11. 기본형 집착 Primitive Obsession

기본형을 객체로 바꾸기
타입 코드를 서브클래스로 바꾸기
조건부 로직을 다형성으로 바꾸기
클래스 추출하기
매개변수 객체 만들기

12. 반복되는 Switch 문 Repeated Switches

조건부 로직을 다형성으로 바꾸기

13. 반복문 Loops

반복문을 파이프라인으로 바꾸기

14. 성의 없는 요소 Lazy Element

함수 인라인하기
클래스 인라인하기
계층 합치기

15. 추측성 일반화 Speculative Generality

계층 합치기
함수 인라인하기
클래스 인라인하기
함수 선언 바꾸기
죽은 코드 제거하기

16. 임시 필드 Temporary Field

클래스 추출하기
함수 옮기기
특이 케이스 추가하기

17. 메시지 체인 Message Chains

위임 숨기기
함수 추출하기
함수 옮기기

18. 중재자 Middle Man

중재자 제거하기
함수 인라인하기

19. 내부자 거래 Insider Trading

함수 옮기기 & 필드 옮기기
위임 숨기기
서브클래스를 위임으로 바꾸기
슈퍼클래스를 위임으로 바꾸기

20. 거대한 클래스 Large Class

클래스 추출하기
슈퍼클래스 추출하기
타입코드를 서브클래스로 바꾸기

21. 서로 다른 인터페이스의 대안 클래스들 Alternative Classes With Different Interfaces

함수 선언 바꾸기
함수 옮기기
슈퍼클래스 추출하기

22. 데이터 클래스 Data Class

레코드 캡슐화하기
세터 제거하기
함수 옮기기
함수 추출하기
단계 쪼개기

23. 상속 포기 Refused Bequest

메서드 내리기 & 필드 내리기
서브클래스를 위임으로 바꾸기
슈퍼클래스를 위임으로 바꾸기

24. 주석 Comments

함수 추출하기
함수 선언 바꾸기
어서션 추가하기
주석을 남겨야 겠다는 생각이 들면, 가장 먼저 주석이 필요 없는 코드로 리팩터링 해본다.