본문 바로가기

Refactoring

Chapter1. 첫번째 예시

작성 중입니다 🏃‍♀️

Chapter 1.

# 공연료 청구서 출력

 

작동 여부를 떠나 (미적으로) 깔끔한 코드가 필요한 이유

모든 기능은 변동 가능성 있는 정책을 가지고 있고 그에 따라 사람이 추가 작업을 해야한다. 이 때,
1. 수정할 부분을 찾기 쉽도록 하며

2. 수정 후 side-effect 체크를 보다 원활히하여 예상치 못한 버그를 피하기 위함이다.

 


 

✅ 발생할 수 있는 문제

- 청구서 작성 방식에 따라 HTML 출력 함수를 수정해야할 수 있다.

- 청구 내역 계산법이 변경될 수 있다.

 

요구 사항을 정리하고, 작동 방식을 여러 함수와 요소로 잘게 나누자.

 

나누기 전에,
시간을 들여 테스트 코드를 마련하자.
작업 단위를 작게 가져가며 사소한 변경에도 테스트 코드를 확인하자.

 

1. 함수 쪼개기 참고 [6.1절] 함수 추출하기

기존 코드에서 기능별로 함수를 나누고, 코드의 기능으로 이름짓는다.

이 때, 함수 내에서 변수의 역할을 드러낼 수 있도록 명확한 변수명을 사용하도록 주의해야한다.

 

2. 지역변수 줄이기 참고 [7.4절] 임시 변수를 질의 함수로 바꾸기 

다른 변수로 계산 가능한 값을 최소한으로 축소한다.

비록 루프 내에서 조회(계산)하는 횟수가 늘더라도 당장 성능에 큰 영향이 없으며,

코드 수정에 유의해야하는 대상이 줄어들기 때문에 추출 작업이 용이해진다는 더 큰 장점이 있다.

 

3. 임시 변수 제거하기 

포함된 로직 속에서만 의미를 가지는 임시 변수를 최소화하기 위해 함수화한다.


4. 좋은 함수 이름 짓기

당장 최선의 이름을 사용하고 나중에 더 적합한 이름으로 수정하자.

함수가 하는 일을 충분히 설명하되 너무 포괄적이지 않도록 기능의 핵심을 파악해서 정의한다.

 

5. 관심사 단위로 반복문 쪼개기 참고 [8.8절] 반복문을 파이프라인으로 바꾸기

한 반복문 내에서 관심사가 다른 내용을 분리하면 1.-4.의 과정이 쉬워진다.

반복문 중복은 성능에 미치는 영향이 미미할 때가 많으니 쿨하게 나누자!

 

 

 확장성 염두하기

동일한 기능을 하지만 출력 형태가 다른 함수를 만들고자 할 때, 단계(파일)를 분리하여 확장성있는 함수로 구성할 수 있다.

모듈화를 통해 각 코드의 기능과 플로우를 파악하기 쉬워지고 오히려 코드의 중복을 막을 수 있다.

- 데이터 처리 단계

- 포맷팅 단계

 

 

  다형성 활용하기

특정 기준에 따라 계산 방식이 바뀔 때 조건부 로직을 사용할 수 있지만, 객체지향의 핵심 특성인 다형성을 활용하면 좋다.