본문 바로가기
AI에게 물어본

[AI에게 물어본] Iterator vs Stream API

by eddy0223 2023. 11. 30.

AI에게 물어본 지식!

프로젝트 서비스단 로직 구현 중 급 고민 & 궁금쓰...

GPT4에게 한번 슬~쩍 물어보았습니다.

Iterator와 Stream API는 Java에서 컬렉션을 처리하는 두 가지 주요 방법입니다.

각각의 특징과 사용 시점에 대해 설명하겠습니다.

1. Iterator

  • Iterator는 컬렉션의 요소를 순회하는 가장 기본적인 방법입니다.
  • Iterator를 사용하면 컬렉션의 요소에 순차적으로 접근하고, 요소를 삭제할 수 있습니다.
  • Iterator를 사용한 코드는 명령형 프로그래밍 스타일에 가깝습니다. 즉, '어떻게'를 기술하는 방식입니다.
  • Iterator는 컬렉션의 상태를 변경할 수 있습니다. 예를 들어, iterator.remove() 메소드를 사용하면 현재 요소를 삭제할 수 있습니다.

2. Stream API

  • Stream API는 Java 8부터 도입된 기능으로, 컬렉션을 처리하는 선언형 프로그래밍 방법입니다. 즉, '무엇을' 할 것인지를 기술하는 방식으로, 코드의 가독성을 높입니다.
  • Stream은 '중간 연산'과 '최종 연산'으로 구분되며, 중간 연산은 최종 연산이 호출될 때까지 실행되지 않는 지연 평가의 특성을 가지고 있습니다. 이를 통해 불필요한 연산을 줄일 수 있습니다.
  • Stream API는 함수형 프로그래밍 스타일을 지원하며, 람다 표현식과 함께 사용하면 코드가 더욱 간결해집니다.
  • Stream은 원본 컬렉션을 변경하지 않습니다. 대신, 새로운 결과를 생성합니다.
  • 병렬 처리를 지원합니다. parallelStream() 메소드를 사용하면 컬렉션의 요소를 여러 쓰레드에서 동시에 처리할 수 있습니다.

결국, Iterator와 Stream API는 각각의 적절한 상황과 필요에 따라 사용해야 합니다.

성능에 큰 차이가 없는 경우, 코드의 가독성이나 유지보수의 편의성을 위해 Stream API를 사용하는 것이 일반적입니다.

하지만, 특정 요소를 제거하는 등의 상황에서는 Iterator를 사용하는 것이 더 적합할 수 있습니다.


Iterator를 사용하는 것이 더 간단하다면, 왜 Stream API를 사용해야 하죠?

-> Stream API를 사용하는 주된 이유는 '가독성', '표현력', '병렬 처리' 등에 있습니다.

  1. 가독성: Stream API는 '무엇을' 수행하는지에 초점을 맞추며, 이는 코드의 가독성을 높입니다. Iterator를 사용하면 '어떻게' 수행하는지에 대한 로직을 작성해야 하지만, Stream API는 연산의 흐름을 더욱 명확하게 표현합니다.
  2. 표현력: Stream API는 filter, map, reduce 등의 다양한 연산을 제공하며, 이를 통해 복잡한 데이터 처리를 간결하게 표현할 수 있습니다. 또한, 이러한 연산들은 체이닝 가능하여 여러 연산을 순차적으로 연결할 수 있습니다.
  3. 병렬 처리: Stream API는 parallelStream()을 통해 쉽게 병렬 처리를 수행할 수 있습니다. 이는 멀티 코어 환경에서 성능을 향상시키는 데 유용합니다.
  4. 불변성: Stream 연산은 원본 데이터를 변경하지 않습니다. 이는 함수형 프로그래밍의 핵심 원칙 중 하나이며, 버그 발생을 줄이고 코드의 안정성을 높이는 데 도움이 됩니다.

그러나 모든 상황에서 Stream API가 더 나은 선택이라는 것은 아닙니다.

예를 들어, 데이터의 삭제나 변경 같은 명령형 연산을 수행하려면 Iterator가 더 적합할 수 있습니다.

또한, Stream API는 오버헤드가 있기 때문에 매우 큰 데이터셋을 처리하는 경우에는 성능에 영향을 줄 수 있습니다.

따라서, 상황에 따라 적절한 도구를 선택하는 것이 중요합니다.

 

가독성과 표현력, 병렬 처리 등이 필요하다면 Stream API를,

특정 요소의 삭제나 변경 등의 명령형 연산이 필요하다면 Iterator를 사용하는 것이 좋습니다.