Chapter14. 점진적인 개선
: 코드를 점진적으로 개선하기
01 책의 예제
<명령형 인수 구문 분석기>
코드 초안
- 모든 로직이 하나의 클래스에 들어가있다.
- 처음부터 지저분한 코드를 짜려는 생각은 없었고, 코드를 어느정도 손 봤지만 새로운 인수 유형이 들어오면서 재앙이 시작됐다.
- 이제는 개선해야 할 때 라는걸 깨닫고, 변경 전후 시스템이 동일하게 돌아간다는 사실을 확인하기 위해 테스트들을 작성해뒀다.
- 자잘하게 점진적으로 개선해나갔다
코드 완성본
- Args 클래스에서 코드 중복을 최소화하고, ArgsException 클래스를 분리했다. ArgumentMarshaler 클래스를 통해 여러 인수에 대한 추후 확장성을 만들어냈다.
- 코드만 분리해도 설계가 좋아진다. 관심사를 분리하면 코드를 이해하고 보수하기 훨씬 더 쉬워진다.
=> 자신이 스스로 점진적으로 코드를 개선해보는 경험을 통해 더 많이 배우게 된다.
02 점진적으로 개선하기
1. 코드가 나빠지고 있음을 느꼈을 때 기능을 추가하지 않고 개선을 시작한다.
2. 테스트 코드를 작성한다.
변경을 가한 후에도 시스템이 변경 전과 똑같이 돌아가야 한다.
테스트 코드가 없다면 작성하고, 코드를 수정하기 전 상태에서 모든 테스트가 통과해야한다.
3. 점진적으로 개선한다
책임에 따라 클래스를 나누고, 코드를 옮긴다. 테스트가 깨지지 않도록 확인하며 자잘한 변경을 조금씩 진행한다.
=> “ 프로그램을 망치는 가장 좋은 방법 중 하나는 개선이라는 이름 아래 구조를 크게 뒤집는 행위다 ”
03 IDE를 활용해 점진적으로 개선하기
- ExtractMethod: 메서드 추출 기능 => 코드 블럭을 메서드로 추출할 수 있다
- Change Signature : 메소드 파라미터 추가, 삭제 및 변경 => 메서드의 파라미터를 추가하거나 변경할 수 있다.
- Rename : 이름 변경 => 메서드나 변수 이름을 변경할 수 있다
- Extract Variable : 변수 추출 기능 => 변수를 추출할 수 있다
- Extract Field : 멤버 변수 추출 기능 => 특정값을 멤버 변수로 설정할 수 있다
- Extract Constant : 상수 추출 기능 => 특정값을 상수로 추출할 수 있다
- Pull Members Up & Pull Members Down => 하위 클래스의 메서드를 상위로 올리거나 & 상위 클래스의 메서드를 하위로 내릴 수 있다
Chapter15. JUnit 들여다보기 & 16. SerialDate 리팩터링
: 라이브러리 분석을 통해 코드를 바라보는 시각 기르기
15장. JUnit 들여다보기
세상에 완벽한 코드는 없다
- 의도를 명확하게 표현하기 위해 조건문을 메서드로 분리
- 전후 단계가 있는 변수들 사이 시간적인 결합 (hidden temporal coupling)을 해결하기 위해 리팩터링
- 더 적절한 의미로 네이밍 변경
- 불필요한 연산을 하는 코드 제거
16장. SerialDate 리팩터링
남의 코드를 비판하고, 내 코드의 비판을 듣는 건 편안하게 여겨야 할 활동이다
Make it Work
- 테스트 코드가 모든 경우를 테스트하지 않는다. -> 주석 처리된 테스트 코드들을 모두 동작하도록 손본다.
- 코드의 구조를 개선하기 전에 버그들을 수정한다. 경계 조건 오류, 늘 거짓인 조건문
Make it Right
- 옛날 스타일 코드 제거 (Month Constants를 상속하는 방식 -> enum Month)
- serialVersionUID를 컴파일러가 자동 생성하도록 함 (직접 변경하지 않아 생기는 버그보다 변경된 UID로 발생한 예외를 디버깅하는게 낫다)
- DayDate(SerialDate) Abstract Factory를 통해 생성하도록 한다.
- 캡슐화를 위해 접근 제한자를 수정 (public->private)
- 사용되지 않는 변수 제거
- 불필요한 주석 제거
오픈소스: 코드 분석 어떻게 하나?
- 해당 솔루션에 대한 기본 지식을 먼저 익혀라.
- 본인 PC에 빌드 및 실행환경을 구축하라
- 수정, 실행, 확인 사이클을 짧게 만들어라
- 자신에게 질문을 많이하라
- 분석하면서 문서로 정리하라
- 디버거 활용하기
- 코드의 일부를 통해 먼저 파악하기
'Group Study (2021-2022) > Clean Code' 카테고리의 다른 글
[클린코드 북리뷰 스터디] 8주차 - 냄새와 휴리스틱 (0) | 2022.07.16 |
---|---|
[클린코드 북리뷰 스터디] 6주차 - 창발성과 동시성 (0) | 2022.07.01 |
[클린코드 북리뷰 스터디] 5주차 - 클래스와 시스템 (0) | 2022.06.26 |
[클린코드 북리뷰 스터디] 4주차 - 경계와 단위 테스트 (0) | 2022.06.20 |
[클린코드 북리뷰 스터디] 2주차 - 주석, 형식 맞추기 (0) | 2022.05.20 |