첫째, 돌려보자
- 분석은 검토, 그 이상도 그 이하도 아니다.
우리 모두가 편안하게 여겨야 할 활동이며 남이 내게 해준다면 감사히 반겨야 할 활동이다. - 비판이 있어야 발전도 가능하다.
- 날짜를 표현하는 자바 클래스인 SerialDate를 비판해보자.
- SerialDate는 SerialDateTests라는 단위 테스트 케이스를 몇 개 포함하고 있는 클래스를 가진다.
하지만 모든 경우를 점검하지 않으므로 클래스를 철저히 이해하고 리팩터링하려면 훨씬 높은 테스트 커버리지가 필요하다. - 그리고 경계 조건 오류, 항상 거짓인 if문과 같은 버그들을 수정한다.
- 변경한 SerialDate가 모든 테스트 케이스를 통과한다면 SerialDate 코드가 제대로 돈다고 믿는다.
- 이후 SerialDate 코드를 '올바로' 고쳐보자.
둘째, 고쳐보자
- 법적인 정보는 필요하므로 라이언스 정보와 저작권은 보존하지만,
이제는 소스 코드 제어 도구를 사용하므로 변경 이력은 없애도록 한다. - import 문은 *로 줄인다.
- 한 소스 코드에 여러 언어를 사용하는 것은 탐탁치 못하므로 Javadoc 주석에 HTML <pre> 태그를 사용한다.
- 클래스 이름은 좀 더 서술적이고 추상화 수준에 올바른 최적의 이름인 DayDate로 변경한다.
- 옛날 자바 프로그래머들이 많이 쓰던 기교를 없앤다.
- 변수를 변경하지 않아 괴상한 오류를 디버깅하느니 차라리 알 수 있는 오류를 디버깅하기 위해
변수를 선언하지 않을 시 컴파일러가 자동으로 생성하도록 한다. - 불필요하거나 중복된 주석은 거짓말과 잘못된 정보가 쌓이기 좋으므로 제거한다.
- ABSTRACT FACTORY 패턴을 적용해 DayDateFactory를 만들고
DayDate를 생성해 훼손하지 않으면서 구현 정보를 전달하도록 한다.
추상 메서드로 위임하는 정적 메서드는 SINGLETON, DECORATOR, ABSTRACT FACTORY 패턴 조합을 사용한다. - 더이상 사용하지 않는 변수와 관련 메서드, 그리고 실질적인 가치가 없고 코드만 복잡하게 만드는 키워드 등은 모두 제거한다.
- 일반적으로 메서드 인수로 플래그는 바람직하지 못하며 특히 출력 형식을 선택하는 플래그는 가급적 피한다.
- 우리는 보이스카우트 규칙을 따라 체크아웃한 코드보다 좀 더 깨끗한 코드를 체크인하게 된다.
- 우리의 코드를 체크아웃할 다음 사람은 우리보다 코드를 좀 더 쉽게 이해하고 좀 더 쉽게 개선하리라.
'Java-Spring > 클린 코드' 카테고리의 다른 글
클린코드 - 목차 (0) | 2023.07.03 |
---|---|
[클린 코드] 17장. 냄새와 휴리스틱 (0) | 2023.03.14 |
[클린 코드] 15장. JUnit 들여다보기 (0) | 2023.03.12 |
[클린 코드] 14장. 점진적인 개선 (0) | 2023.03.12 |
[클린 코드] 13장. 동시성 (0) | 2023.03.11 |