자바 8버전부터 추가된 컬렉션 요소를 하나씩 참조해서 람다식(함수적 인터페이스)으로 처리할 수 있도록 해주는 반복자이다.
자바 8 이전에는 컬렉션 처리에는 무조건 Iterator가 이용되었으나, 선택의 폭이 넓어졌다.
외부 반복자(external iterator)
: 개발자가 코드로 직접 컬렉션 요소를 반복해서 가져오는 코드 패턴이다.
for
, iterator
, while
등내부 반복자(internal iterator)
: 컬렉션 내부에서 요소들을 반복시키고, 개발자는 요소당 처리해야 할 코드만 제공하는 코드 패턴이다.스트림은 내부 반복자를 사용한다.
내부 반복자는 처리코드만 제공하고 처리를 위임하여 병렬 처리가 컬렉션 내부에서 일어나게 만들 수 있다.
외부 반복자는 요소를 가져오는 것부터 처리하는 것까지 모두 개발자가 작성해야 한다.
개발자는 요소 처리 코드에만 집중할 수 있다.
내부 반복자는 반복 순서 변경이나 멀티코어 CPU 활용을 위해 요소들을 분배시켜 병렬작업이 가능하다.
병렬처리 예제 코드를 작성해보고 실행해보았다. 병렬처리를 하고 싶으면 간단하게 .parallelStream()
을 이용하여 메소드 체인을 작성하면 된다.
또, .stream()
으로 메소드 체인을 시작했더라도 .parallel()
메소드를 통해서 체인을 이어나가면 이어지는 부분을 병렬처리 할 수 있다.
스트림은 중간처리(Intermediate Operation
)와 최종처리(Terminal Operation
) 개념이 있는데, 두 페이즈를 명확히 나누는 편인 것 같다.
중간처리
: 매핑(mapXxx)
, 필터링(filter, distinct)
, 정렬(sorted)
, 반복(peek)