반복 구문을 포함하는 코드를 작성해본 경험은 누구나 있을 것이다. 반복 구문이 필요한 경우는 단일
요소를 처리하기보다 여러 요소로 구성된 시퀀스를 처리하는 알고리즘을 작성하기 위한 경우가 대
부분이다. 이를 위해 foreach, for, while 등이 주로 많이 사용된다. 일반적으로 반복 구문을 포함하는
메서드를 작성하는 경우에 매개변수로 컬렉션을 받아와서 컬렉션에 포함된 요소들을 살펴보거나,
내용을 수정하거나, 혹은 그중 일부만 필터링해서 또 다른 컬렉션에 그 결과를 저장한 후 반환하는
식으로 코드를 작성하게 된다.
이와 같이 작업을 수행하는 것은 효율성에 문제가 있다. 왜냐하면 전체 컬렉션을 대상으로 단 하나의
작업만을 수행하는 경우는 거의 없고, 최초 원본 컬렉션에 대해 다양한 작업을 여러 단계를 거쳐 수
행한 후에야 비로소 원하는 결과를 얻을 수 있는 경우가 대부분이기 때문이다. 여러 단계를 거치는
동안 중간 결과를 저장하기 위해서 추가적으로 컬렉션(아마도 매우 큰)이 필요할 수도 있다.
또한 첫 번째 요소에 대해 첫 번째 작업을 완료했다 하더라도 전체 컬렉션에 대해 첫 번째 작업을
모두 완료하기 전까지는 두 번째 작업을 시작할 수 없다는 단점이 있다. 게다가 이런 방식은 매 단계
마다 매번 전체 컬렉션을 순회해야 하기 때문에 다단계로 구성된 알고리즘을 수행하는 경우 전체적
으로 수행 시간이 길어질 수밖에 없다.
대안으로는 개별 요소에 대해 수행해야 하는 모든 작업을 분리된 메서드로 작성한 후 루프 내에서 이
메서드를 호출하는 방법이 있을 수 있다. 이렇게 하면 컬렉션을 한 번만 순회하면 되므로 성능이 개
선되고, 중간 결과물을 저장하기 위한 컬렉션을 사용할 필요가 없기 때문에 메모리도 적게 사용된다.