03. 코드에서 나는 악취
냄새나면 당장 갈아라. - 켄트 벡 할머니의 육아 원칙
느낀점#
- switch 문을 인정해서 놀람
 - 가변데이터는 항상 신경쓰자
 - SRP 항상 유념
 주석을 남겨야겠다는 생각이 들면, 가장 먼저 주석이 없는 코드로 리팩터링 해본다.
요약 정리#
- 리팩터링을 언제 해야할지 정확히 짚어주진 않지만 그 문제 징후들을 나열해준다
 
냄새 리스트#
- 기이한 이름
 - 중복 코드
 - 긴 함수
- 주석이 있을만 한 부분은 함수로 추출
 - 함수 이름은 의도가 잘 드러나도록
 
 - 긴 매개변수 목록
 - 전역 데이터
 - 가변 데이터
- 변수 캡슐화하기
 - 변수 쪼개기
 - 질의 함수와 변경 함수 분리하기
 - 세터 제거하기
 - 가변데이터 범위 조절 신경쓰기
 - 참조를 값으로 바꾸기
 
 - 뒤엉킨 변경
- 책임이 너무 많아 SRP를 못지켜 생긴 일
 
 - 산탄총 수술
- 뒤엉킨 변경과는 반대로 한기능을 수정해야할 때 많은 곳에서 수정해야 할 때
 
 - 기능 편애
- 어떤 함수가 자기가 속한모듈보다 다른 모듈과 상호작용이 많을 때 생기는 냄새
 - 뒤엉킨 변경과 상충되는 것도 있음 (전략, 방문자 패턴)
 
 - 데이터 뭉치
- 여러 역할의 데이터가 한 곳에
 
 - 기본형 집착
 - 반복되는 switch 문
- switch는 무조건 다형성으로 교체 안해도 됨
 - 대신 반복되는 switch는 많은 변경을 해야되니
 
 - 반복문
- 파이프라인을 바꾸기
 
 - 성의없는 요소
- 함수, 클래스, 인터페이스 등을 요소라고 말함
 - 해당 요소를 설계를 위해 만들었지만 필요 없을 때, 필요 없어질 때는 없애자
 
 - 추측성 일반화
- '나중에 필요할거야' 같은 생각은 버리자
 
 - 임시 필드
 - 메시지 체인
- 자주 사용되는 체인은 위임 숨기기, 함수 추출하기를 활용할 수 있음
 
 - 중개자
- 중개자가 너무 과도하면 의도를 파악하기 어려움
 - 이땐 중개자를 제거하여 직접 실제 일하는 객체와 소통하도록 하자
 
 - 내부자 거래
- 같은 계층끼리 거래는 내부자 거래라 말할 수 있음
 - 계층화를 하여 같은 계층끼리의 거래를 상위로 꺼낼수 있음
 
 - 거대한 클래스
 - 서로다른 인터페이스의 대안 클래스들
 - 데이터 클래스
 - 상속 포기
- 무조건 상속이 나쁜건 아님
 - 공통적인 로직을 상위로 빼는 상속은 재사용성 측면에서 좋음
 
 - 주석
주석을 남겨야겠다는 생각이 들면, 가장 먼저 주석이 없는 코드로 리팩터링 해본다.