3

오민준·2025년 2월 27일

Chapter 3 Intro

  • 리팩토링을 언제 시작하고 언제 그만할지 명확하게 정립된 규칙이 없다.
  • 리팩토링할 시점을 '냄새'라는 표현을 사용하는데 그러한 '냄새'가 나는 코드들에 일정한 패턴이 있다.
  • 그러나 언제 리팩토링을 멈춰야 하는지에 대해서는 숙련된 사람의 직관만큼 정확한 기준이 없기에 명확한 기준을 제시하지 않을 것이다.

기이한 이름

  • 함수, 모듈, 변수, 클래스의 이름은 명확해야 한다.

중복 코드

  • 반복되는 중복 코드는 하나로 통합해야 한다.
  • 함수 추출하기, 문장 슬라이스하기, 메서드 올리기등을 활용한다.

긴 함수

  • 코드를 이해하고, 공유하고, 선택하기 쉬워지는 장점은 함수를 짧게 구성할 때 나온다.
  • 함수의 이름을 잘 지어두면 본문코드를 볼 이유가 사라진다.
  • 함수 추출하기를 활용한다.

긴 매개변수 목록

  • 매개변수 목록이 길어지면 그 자체로 이해하기 어려워진다.
  • 매개변수를 질의 함수로 바꾸기를 활용한다.

전역 데이터

  • 변수 캡슐화하기를 활용한다.

가변 데이터

  • 변수 캡슐화하기를 활용한다.

뒤엉킨 변경

  • 하나의 모듈이 서로 다른 이유로 인해 여러가지 방식으로 변경되는 일이 많을 때 발생한다.
  • 이는 단일 책임 원칙이 제대로 지켜지지 않아서 발생하는 것이다.

산탄총 수술

  • 코드를 변경할 때마다 변경해야 하는 부분이 코드 전반에 퍼져 있을 때 발생한다.

기능 편애

  • 모듈화 시, 나뉜 영역간의 상호작용은 최소로 줄여야 하지만 그렇지 못했을 때 주로 발생한다.

데이터 뭉치

  • 클래스 추출하기, 매개변수 객체 만들기, 객체 통째로 넘기기를 활용한다.

기본형 집착

  • 자료형을 문자형으로만 표현할 때 발생한다.

반복되는 switch문

반복문

성의 없는 요소

  • 함수 인라인하기, 클래스 인라인하기, 계층 합치기를 활용한다.

추측성 일반화

  • 나중에 필요할거라는 생각으로 작성한 코드가 이해하거나 관리하기 어려워진 경우에 발생한다.
  • 계층 합치기, 함수 인라인하기, 클래스 인라인하기로 삭제하거나 본문에서 사용되지 않는 매개변수는 함수 선언 바꾸기로 없앤다.
  • 테스트 코드 외에 사용한 적이 없는 코드는 죽은 코드 제거하기를 활용한다.

임시 필드

  • 특정 상황에만 값이 생선되는 클래스가 이해하기 어려운 경우게 발생한다.
  • 클래스 추출하기, 함수 옮기기, 특이 케이스 추가하기를 활용한다.

메시지 체인

중개자

  • 클래스가 제공하는 메서드의 상당 부분이 다른 클래스에 구현을 위임하고 있는 경우 발생한다.

내부자 거래

거대한 클래스

  • 클래스에 필드가 너무 많으면 중복 코드가 생기기 쉽다.
  • 클래스 추출하기로 일부 필드를 묶어 해결한다.

서로 다른 인터페이스의 대안 클래스들

데이터 클래스

상속 포기

  • 서브클래스를 위임으로 바꾸기, 슈퍼클래스를 위임으로 바꾸기를 활용한다.

주석

  • 주석을 남기기 전에 주석이 필요없는 코드를 짤 수 있는지 리팩토링 해보자
profile
ChatGPT-Driven Development를 지양합니다.

0개의 댓글