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