리팩터링/리팩터링 기법

리팩터링 기법. 반복문을 파이프라인으로 바꾸기(Replace Loop with Pipeline)

developer-tj 2023. 4. 7. 12:00
반응형

반복문을 파이프라인으로 바꾸기(Replace Loop with Pipeline)는 컬렉션을 다루는 로직에서 특히 효과적인 기법입니다.
기존에는 반복문을 사용하여 컬렉션의 원소를 하나씩 처리했지만, 이를 파이프라인으로 변경하여 더욱 간결하고 가독성이 좋은 코드로 만드는 것입니다.

파이프라인은 입력 데이터를 처리하고 출력 데이터를 생성하는 여러 단계로 나누어져 있는 프로세스를 의미합니다.
각 단계는 이전 단계의 출력을 입력으로 받아 다음 단계의 출력을 생성합니다.
이러한 구조를 활용하여 컬렉션을 처리하는 코드를 구현할 수 있습니다.

예를 들어, 다음과 같은 반복문 코드가 있다고 가정해 봅시다.


std::vector numbers = {1, 2, 3, 4, 5};
std::vector doubledNumbers;
for (int number : numbers) {
    doubledNumbers.push_back(number * 2);
}

위 코드는 벡터 numbers의 모든 원소를 순회하며 각 원소에 2를 곱한 결과를 doubledNumbers 벡터에 추가하는 코드입니다.
하지만 이를 파이프라인으로 변경하면 다음과 같이 더 간결하고 가독성이 좋은 코드를 구현할 수 있습니다.


std::vector numbers = {1, 2, 3, 4, 5};
std::transform(numbers.begin(), numbers.end(), std::back_inserter(doubledNumbers), [](int number) { return number * 2; });

위 코드에서는 std::transform() 함수를 사용하여 벡터 numbers의 모든 원소에 2를 곱한 결과를 doubledNumbers 벡터에 추가하고 있습니다.
std::transform() 함수는 STL의 알고리즘 중 하나로, 입력 범위와 출력 범위를 지정하고 변환 함수를 지정하여 입력 범위의 모든 요소를 변환한 결과를 출력 범위에 저장합니다.
이렇게 변환된 데이터를 다시 다른 함수에 입력으로 넘겨 파이프라인을 구성할 수 있습니다.
이 코드는 반복문을 사용한 기존 코드보다 더 간결하고 가독성이 좋습니다.

반복문을 파이프라인으로 변경하는 것은 코드의 가독성과 유지보수성을 향상시키는 데 큰 도움이 됩니다.
특히 컬렉션을 다루는 코드에서는 파이프라인을 활용하여 불필요한 반복문을 제거하고 간결하고 명확한 코드를 구현하는 것이 좋습니다.