클린코드 17장 - 냄새와 휴리스틱

Seoyoung Lee·2022년 6월 30일
0

Clean Code

목록 보기
12/12
post-thumbnail

17장에서는 다양한 ‘코드 냄새'를 소개한다.

주석

주석은 코드와 설계에 기술적인 설명을 부연하는 수단으로, 코드만으로 다하지 못하는 설명을 부언한다.

  • 부적절한 정보
  • 쓸모 없는 주석
  • 중복된 주석
  • 성의 없는 주석
  • 주석 처리된 코드

환경

빌드와 모든 단위 테스트는 한 명령으로 수행할 수 있어야 한다.

  • 여러 단계로 빌드해야 한다
  • 여러 단계로 테스트해야 한다

함수

  • 너무 많은 인수
  • 출력 인수
  • 플래그 인수
    • boolean 인수는 함수가 여러 기능을 수행한다는 의미이다.
  • 죽은 함수
    • 아무도 호출하지 않는 함수는 삭제한다.

일반

  • 한 소스 파일에 어려 언어를 사용한다
  • 당연한 동작을 구현하지 않는다
    • 최소 놀람의 원칙에 따라 함수나 클래스는 다른 프로그래머가 당연하게 여길 동작과 기능을 제공해야 한다.
  • 경계를 올바로 처리하지 않는다
    • 스스로의 직관에 의존하지 말고 모든 경계 조건을 찾아내고 테스트 해야 한다.
  • 안전 절차 무시
  • 중복
    • DRY(Don’t Repeat Yourself) 원칙
    • 코드에서 중복을 발견하는 것을 추상화를 할 기회로 여겨라.
  • 추상화 수준이 올바르지 못하다
    • 모든 저차원 개념은 파생 클래스에 넣고 모든 고차원 개념은 기초 클래스에 넣는다.
  • 기초 클래스가 파생 클래스에 의존한다
    • 일반적으로 기초 클래스는 파생 클래스를 아예 몰라야 한다.
  • 과도한 정보
    • 정보를 제한해 결합도를 낮춰야 한다.
  • 죽은 코드
  • 수직 분리
    • 변수와 함수는 사용되는 위치에 가깝게 정의한다.
  • 일관성 부족
  • 잡동사니
  • 인위적 결합
    • 함수, 상수, 변수를 선언할 때는 올바른 위치를 고민해야 한다.
  • 기능 욕심
  • 선택자 인수
  • 모호한 의도
  • 잘못 지운 책임
  • 부적절한 static 함수
    • static 함수는 재정의할 가능성이 없을 때 정의하는 것이 좋다.
  • 서술적 변수
    • 계산을 여러 단계로 나누고 중간 값으로 서술적인 변수 이름을 사용한다.
  • 이름과 기능이 일치하는 함수
  • 알고리즘을 이해하라
    • 구현이 끝났다고 선언하기 전 함수가 돌아가는 방식을 확실히 이해하는지 확인해야 한다.
  • 논리적 의존성은 물리적으로 드러내라
  • If/Else 혹은 Switch/Case문보다 다형성을 사용하라
  • 표준 표기법을 따르라
  • 매직 숫자는 명명된 상수로 교체하라
  • 정확하라
  • 관례보다 구조를 사용하라
  • 조건을 캡슐화하라
  • 부정 조건은 피하라
  • 함수는 한 가지만 해야 한다
  • 숨겨진 시간적인 결합
  • 일관성을 유지하라
  • 경계 조건을 캡슐화하라
  • 함수는 추상화 수준을 한 단계만 내려가야 한다
  • 설정 정보는 최상위 단계에 둬라
  • 추이적 탐색을 피하라
    • 한 모듈은 주변 모듈을 모를수록 좋다.

테스트

  • 불충분한 테스트
    • 테스트 케이스는 잠재적으로 깨질 만한 부분을 모두 테스트해야 한다.
  • 커버리지 도구를 사용하라
  • 사소한 테스트를 건너뛰지 마라
  • 무시한 테스트는 모호함을 뜻한다
  • 경계 조건을 테스트하라
  • 버그 주변은 철저히 테스트하라
  • 실패 패턴을 살펴라
  • 테스트 커버리지 패턴을 살펴라
  • 테스트는 빨라야 한다

이 책을 읽은지 몇 달이 되어서 가물가물한 부분도 많았는데 이 장을 읽으면서 주석부터 테스트까지 다시 한 번 주의해야 할 점들을 복습할 수 있어서 좋았다. 나중에 코딩할 때도 이 장을 자주 참고하게 될 것 같다.

profile
나의 내일은 파래 🐳

0개의 댓글

관련 채용 정보