1.2 예시 프로그램을 본 소감
- 프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고 나서 원하는 기능을 추가한다.
1.3 리팩터링의 첫 단계
- 리팩터링하기 전에 제대로 된 테스트부터 마련한다.
- 테스트는 반드시 자가진단하도록 만든다.
1.4 statement() 함수 쪼개기
- 조금씩 변경하고 매번 테스트 하는 것이 리팩터링 절차의 핵심이다.
- 중간에 실수하더라도 버그를 쉽게 찾을 수 있다.
- 명확성을 높이기 위한 이름 바꾸기에는 조금도 망설이지 말자.
- 지역 변수를 제거해서 얻는 가장 큰 장점은 추출 작업이 훨씬 쉬워진다.
- scope 신경을 써야할 대상이 줄어들기 때문이다
- 임시 변수는 자신이 속한 루틴에서만 의미가 있으니 제거하는 것이 좋다
- 긴 함수를 잘게 쭈개는 리팩터링은 이름은 잘 지어야만 효과가 있다.
- 이름이 좋으면 로직을 안보더라도 무슨 일을 하는지 알 수 있다.
- 리팩터링으로 인한 성능 문제는 특별한 경우가 아니라면 일단 무시하자
- 최신식 컴파일러가 알아서 캐싱하거나 해결해준다
- v8 엔진 같은 경우에도 turboFan이라는 컴파일러가 캐싱해준다
지금까지 한 리팩토링 과정
- 반복문 쪼개기
- 변수 값을 누적시키는 부분을 분리한다
- 문장 슬라이드하기
- 변수 초기화 문장을 변수 값 누적 코드 바로 앞으로 옮긴다
- 함수 추출하기
- 적립 포인트 계산 부분을 별도 함수로 추출한다
- 변수 인라인하기
- volumeCredits 변수를 제거한다.
1.6 계산 단계와 포매팅 단계 분리하기
- 복잡하게 얽힌 덩어리를 잘개 쪼개는 작업은 이름을 잘 짓는 일만큼 중요하다
- 단계 쪼개기
- 함수 추출하기
1.7 중간 점검: 두 파일로 분리됨
- 프로그래밍에서는 명료함이 진화할 수 있는 소프트웨어의 정수다
- 항시 코드베이스를 작업 시작 전보다 건강하게 만들어놓고 떠나야 한다.
1.8 다형성을 활용해 계산 코드 재구성하기
- 조건부 로직은 프로그래밍 언어가 제공하는 구조적인 요소로 적절히 보완해야한다.
- 다형성을 활용하자.
- 함수 옮기기 리팩터링 - p68
- 함수를 인라인하여 새 함수를 직접 호출하도록 수정한다 - p69
- 타입 코드 대신 서브 클래스를 사용하도록 변경한다 - p70
- 생성자를 팩터리 함수로 만들기 - p70
1.9 상태 점검: 다형성을 활용하여 데이터 생성하기
- 같은 타입의 다형성을 기반으로 실행되는 함수가 많을수록 이렇게 구성하는 쪽이 유리하다.
1.10 마치며
- 리팩터링은 대부분 코드가 하는 일을 파악하는 데서 시작된다.
- 그래서 코드를 읽고, 개선점을 찾고, 리팩터링 작업을 통해 개선점을 코드에 반영하는 식으로 진행한다.
- 그 결과 코드가 명확해지고 이해하기 더 쉬워진다
- 좋은 코드를 가늠하는 확실한 방법은 얼마나 수정하기 쉬운가다
- 리팩터링을 효과적으로 하는 핵심은, 단계를 잘게 나눠야 더 빠르게 처리할 수 있고, 코드는 절대 깨지지 않으며, 이러한 작은 단계들이 모여서 상당히 큰 변화를 이룰 수 있다는 사실을 깨닫는 것이다.
'핌팩토링' 카테고리의 다른 글
7. 캡슐화 (0) | 2022.04.27 |
---|---|
6. 기본적인 리팩터링 (0) | 2022.03.26 |
4. 테스트 구축하기 (0) | 2022.03.12 |
3. 코드에서 나는 악취 (0) | 2022.02.28 |
2. 리팩터링 원칙 (0) | 2022.02.13 |