반응형
반복문(Loops)을 사용하는 것이 코드 작성의 효율성을 높일 수 있지만, 반복문이 중첩되거나 복잡한 조건문과 함께 사용되는 경우 코드의 복잡성이 증가하고 코드를 이해하기 어려워질 수 있습니다.
반복문의 문제점 중 하나는 다른 로직과 함께 사용되는 경우 유지보수성이 낮아질 수 있다는 것입니다.
예를 들어, 아래의 코드에서 반복문은 사이즈를 계산하고, 각 색상의 평균값을 계산하는 두 가지 다른 로직과 함께 사용됩니다.
int size = 0;
double redSum = 0.0;
double greenSum = 0.0;
double blueSum = 0.0;
for (int i = 0; i < pixels.size(); ++i) {
size++;
redSum += pixels[i].red();
greenSum += pixels[i].green();
blueSum += pixels[i].blue();
}
double redAverage = redSum / size;
double greenAverage = greenSum / size;
double blueAverage = blueSum / size;
위 코드를 아래와 같이 수정한다면 반복문을 포함하지 않고도 코드의 가독성과 유지보수성을 높일 수 있습니다.
int size = pixels.size();
double redSum = std::accumulate(pixels.begin(), pixels.end(), 0.0,
[](double sum, const Pixel& p) { return sum + p.red(); });
double greenSum = std::accumulate(pixels.begin(), pixels.end(), 0.0,
[](double sum, const Pixel& p) { return sum + p.green(); });
double blueSum = std::accumulate(pixels.begin(), pixels.end(), 0.0,
[](double sum, const Pixel& p) { return sum + p.blue(); });
double redAverage = redSum / size;
double greenAverage = greenSum / size;
double blueAverage = blueSum / size;
위 코드에서는 std::accumulate()를 사용하여 반복문 없이 요소의 합을 계산할 수 있습니다.
이렇게 하면 코드의 가독성이 높아지고, 필요한 로직을 분리할 수 있으며, 재사용성도 높아집니다.
이와 같은 방식으로 반복문을 대체하여 코드를 개선할 수 있습니다.
적용 가능한 리팩터링 기법
- 반복문을 파이프라인으로 바꾸기(Replace Loop with Pipeline)
'리팩터링 > 냄새 (리팩터링할 시점)' 카테고리의 다른 글
냄새 14. 성의 없는 요소(Lazy Element) (0) | 2023.04.08 |
---|---|
냄새 12. 반복되는 switch문(Repeated Switches) (0) | 2023.04.04 |
냄새 11. 기본형 집착(Primitive Obsession) (0) | 2023.03.31 |
냄새 10. 데이터 뭉치(Data Clumps) (0) | 2023.03.30 |
냄새 9. 기능 편애(Feature Envy) (0) | 2023.03.29 |