gosuminjun
로그인
gosuminjun
로그인
3
오민준
·
2025년 2월 27일
팔로우
0
Chapter 3 Intro
리팩토링을 언제 시작하고 언제 그만할지 명확하게 정립된 규칙이 없다.
리팩토링할 시점을 '냄새'라는 표현을 사용하는데 그러한 '냄새'가 나는 코드들에 일정한 패턴이 있다.
그러나 언제 리팩토링을 멈춰야 하는지에 대해서는 숙련된 사람의 직관만큼 정확한 기준이 없기에 명확한 기준을 제시하지 않을 것이다.
기이한 이름
함수, 모듈, 변수, 클래스의 이름은 명확해야 한다.
중복 코드
반복되는 중복 코드는 하나로 통합해야 한다.
함수 추출하기, 문장 슬라이스하기, 메서드 올리기
등을 활용한다.
긴 함수
코드를 이해하고, 공유하고, 선택하기 쉬워지는 장점은 함수를 짧게 구성할 때 나온다.
함수의 이름을 잘 지어두면 본문코드를 볼 이유가 사라진다.
함수 추출하기
를 활용한다.
긴 매개변수 목록
매개변수 목록이 길어지면 그 자체로 이해하기 어려워진다.
매개변수를 질의 함수로 바꾸기
를 활용한다.
전역 데이터
변수 캡슐화하기
를 활용한다.
가변 데이터
변수 캡슐화하기
를 활용한다.
뒤엉킨 변경
하나의 모듈이 서로 다른 이유로 인해 여러가지 방식으로 변경되는 일이 많을 때 발생한다.
이는 단일 책임 원칙이 제대로 지켜지지 않아서 발생하는 것이다.
산탄총 수술
코드를 변경할 때마다 변경해야 하는 부분이 코드 전반에 퍼져 있을 때 발생한다.
기능 편애
모듈화 시, 나뉜 영역간의 상호작용은 최소로 줄여야 하지만 그렇지 못했을 때 주로 발생한다.
데이터 뭉치
클래스 추출하기, 매개변수 객체 만들기, 객체 통째로 넘기기
를 활용한다.
기본형 집착
자료형을 문자형으로만 표현할 때 발생한다.
반복되는 switch문
반복문
성의 없는 요소
함수 인라인하기, 클래스 인라인하기, 계층 합치기
를 활용한다.
추측성 일반화
나중에 필요할거라는 생각으로 작성한 코드가 이해하거나 관리하기 어려워진 경우에 발생한다.
계층 합치기, 함수 인라인하기, 클래스 인라인하기
로 삭제하거나 본문에서 사용되지 않는 매개변수는
함수 선언 바꾸기
로 없앤다.
테스트 코드 외에 사용한 적이 없는 코드는
죽은 코드 제거하기
를 활용한다.
임시 필드
특정 상황에만 값이 생선되는 클래스가 이해하기 어려운 경우게 발생한다.
클래스 추출하기, 함수 옮기기, 특이 케이스 추가하기
를 활용한다.
메시지 체인
중개자
클래스가 제공하는 메서드의 상당 부분이 다른 클래스에 구현을 위임하고 있는 경우 발생한다.
내부자 거래
거대한 클래스
클래스에 필드가 너무 많으면 중복 코드가 생기기 쉽다.
클래스 추출하기
로 일부 필드를 묶어 해결한다.
서로 다른 인터페이스의 대안 클래스들
데이터 클래스
상속 포기
서브클래스를 위임으로 바꾸기, 슈퍼클래스를 위임으로 바꾸기
를 활용한다.
주석
주석을 남기기 전에 주석이 필요없는 코드를 짤 수 있는지 리팩토링 해보자
오민준
ChatGPT-Driven Development를 지양합니다.
팔로우
이전 포스트
Chapter 2
0개의 댓글
댓글 작성