03. 코드에서 나는 악취

냄새나면 당장 갈아라. - 켄트 벡 할머니의 육아 원칙

느낀점#

  • switch 문을 인정해서 놀람
  • 가변데이터는 항상 신경쓰자
  • SRP 항상 유념
  • 주석을 남겨야겠다는 생각이 들면, 가장 먼저 주석이 없는 코드로 리팩터링 해본다.

요약 정리#

  • 리팩터링을 언제 해야할지 정확히 짚어주진 않지만 그 문제 징후들을 나열해준다

냄새 리스트#

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