[CleanCode] 냄새와 휴리스틱
냄새와 휴리스틱
주석
- 부적절한 정보
- 다른시스템(소스코드관리시스템 등)에 저장할 정보는 주석으로 적적하지 못하다.
- 쓸모 없는 주석
- 오래된 잘못된 주석은 쓸모 없다.
- 중복된 주석
- 성의 없는 주석
- 주석 처리된 코드
환경
-
여러 단계로 빌드
- 빌드는 간단히 한 단계로 끝나야 한다.
-
여러 단계로 테스트
- 모든 단위 테스트는 한 명령으로 돌려야 한다.
함수
-
너무 많은 인수
-
죽은 함수
- 아무도 호출하지 않는 함수는 삭제한다.
일반
-
한 소스 파일에 여러 언어를 사용하지 않는다.
-
당연한 동작을 구현하지 않는다.
- 함수 기능을 직관적으로 예상하기 어렵다.
-
경계를 올바로 처리하지 않는다.
- 모든 경계 조건을 찾아내고, 모든 경계 조건을 테스트하는 테스트 케이스를 작성한다.
-
안전 절차 무시
- 실패하는 테스트 케이스를 일단 제껴두고 나중으로 미루면 안 된다.
-
중복
-
추상화 수준이 올바르지 못하다.
-
기초 클래스가 파생 클래스에 의존한다.
-
과도한 정보
- 작을 수록 좋다.
-
죽은 코드
-
수직분리
- 변수와 함수는 사용되는 위치에 가깝게 정의한다.
-
일관성 부족
- 유사 개념은 동일 방식으로 구현한다.
-
잡동사니
- 비어 있는 기본 생성자 같은 것은 작성하지 않는다.
-
기능 욕심
- 클래스, 메서드는 자기 클래스의 변수와 함수에 관심을 가져야지 다른 클래스의 변수와 함수에 관심을 가져선 안 된다.
-
인위적 결합
- 무관한 개념은 인위적으로 결합하지 않는다.
-
모호한 의도
-
부적절한 Static 함수
-
If/Else 혹은 Switch는 다형성을 사용해라.
-
표준 표기법을 따른다.
-
매직 숫자는 명명된 상수로 교체한다.
-
관례보단 구조를 사용한다.
-
함수는 한 가지만 해야한다.
-
일관성을 유지하라.
-
함수는 추상화 수준을 한 단계만 내려가야 한다.
-
추이적 탐색을 피하라
- 일반적으로 한 모듈은 주변 모듈을 모를수록 좋다.
자바
- 상수는 상속하지 않는다.
- 상수 대신 Enum을 마음껏 활용하라.
이름
- 서술적인 이름을 사용하라
- 긴 범위는 긴 이름을 사용하라
- 인코딩을 피하라
- 이름으로 부수 효과를 설명하라
테스트
- 불충분한 테스트
- 테스트 케이스는 잠재적으로 깨질 만한 부분을 모두 테스트해야한다.
- 사소한 테스트는 건너뛰지 마라
- 무시한 테스트는 모호함을 뜻한다.
- 경계 조건을 테스트하라
- 버그 주변은 철저히 테스트하라
- 실패 패턴을 살펴라
- 테스트 커버리지 패턴을 살펴라
- 테스트는 빨라야 한다.