logo
새로운 블로그로 이전하였습니다.

(리팩터링 2판) ch03. 코드에서 나는 악취

  • 리팩터링
  • refactoring
  • 마틴파울러
  • 코드악취

마틴 파울러는 리팩터링이 필요한 코드들에 일정한 패턴이 있다는 것을 발견하였고, 그 패턴을 코드에서 나는 악취라고 부른다.

악취가 풍기는 코드 목록들은 다음과 같다.

1. 기이한 이름
2. 중복 코드
3. 긴 함수
4. 긴 매개변수 목록
5. 전역 데이터
6. 가변 데이터
7. 뒤엉킨 변경
8. 산탄총 수술
9. 기능 편애
10. 데이터 뭉치
11. 기본형 집착
12. 반복되는 switch
13. 반복문
14. 성의 없는 요소
15. 추측성 일반화
16. 임시 필드
17. 메시지 체인
18. 중개자
19. 내부자 거래
20. 거대한 클래스
21. 서로 다른 인터페이스의 대안 클래스들
22. 데이터 클래스
23. 상속 포기
24. 주석

이 중에서 내가 자주 맡는 악취 코드 세 가지 유형을 정리해보았다.


✏️ 기이한 이름 Mysterious Name

  • 코드를 명료하게 표현하는 데 가장 중요한 요소 중 하나는 이름이다.
  • 함수, 모듈, 변수, 클래스 등은 이름만 보고도 각각이 무슨 일을 하고 어떻게 사용해야하는 지 명확히 알 수 있도록 잘 지어야 한다.
  • 마땅한 이름이 떠오르지 않는다면 설계에 더 근본적인 문제가 숨어있을 가능성이 높다.

🗼 긴 함수 Long Function

짧은 함수의 중요성

  • 코드를 이해하고 공유하고 선택하기 쉬워진다.
  • 요즘 언어는 프로세스 안에서 함수 호출 비용이 거의 없기 때문에, 함수가 짧은 것이 좋다.

함수 쪼개기

  • 주석을 달아야 할 만한 부분은 무조건 함수로 만들어야 한다
  • 함수명에는 동작 방식이 아닌 의도가 드러나야 한다.
  • 원래 코드보다 길어지더라도 함수를 뽑아내야 한다.
  • 무엇을 하는 지를 코드가 잘 설명해주지 못할 수록 함수로 만드는 게 유리하다.

추출할 코드 덩어리 찾는 법

  1. 주석 참고하기
  • 주석이 설명하는 코드는 함수로, 주석 내용을 토대로 함수 이름을 짓는다.
  1. 조건문, 반복문 찾기

🌐 전역 데이터 Global Data

전역 데이터의 단점

코드베이스 어디에서든 건드릴 수 있고, 값을 누가 바꿨는 지 찾아낼 메커니즘이 없다는 것

보완법

변수 캡슐화하기

  • 전역 변수 데이터를 함수로 감싸, 데이터를 수정하는 부분을 쉽게 찾고 접근을 통제할 수 있음
  • 접근자 함수들을 클래스나 모듈에 집어넣고 그 안에서만 사용할 수 있도록 접근 범위를 최소로 줄일 수도 있음