스트림이란?

김연준·2023년 2월 22일
0

Java

목록 보기
1/1

컬렉션 및 배열에 저장된 요소를 반복처리하기 위해서 for문과 Iterator를 이용하는 방법도 있지만 java8부터 스트림(Stream)을 이용해서 처리하는 방법이 생겼다.
스트림이란 요소들이 하나씩 흘러가면서 처리된다는 의미를 가지고 있다.
아래의 코드는 String타입의 List컬렉션으로부터 스트림을 이용해 요소를 반복처리하는 코드이다.

List<String> str = new ArrayList<>();
        str.add("a");
        str.add("b");
        str.add("c");
        Stream<String> stream = str.stream();
        stream.forEach( item -> System.out.println(item));

스트림은 각 컬렉션으로부터 .stream()메소드를 통해 스트림 객체로 변환 후 스트림 객체의 메소드(.forEach)로 반복 처리를 할 수 있다.

스트림은 다음과 같은 특징이 있다.
1. 내부 반복자이므로 처리 속도가 빠르고 병렬 처리에 효율적이다.
2. 람다식으로 다양한 요소 처리를 정의할 수 있다.
3. 중간 처리와 최종 처리를 수행하도록 파이프 라인을 형성할 수 있다.

내부 반복자 vs 외부 반복자

외부 반복자일 경우는 컬렌션의 요소를 외부로 가져오는 코드와 처리하는 코드를 모두 개발자 코드가 가지고 있어야 한다.
내부 반복자는 멀티 코어 CPU를 최대한 활용하기 위해 요소들을 분배시켜 병렬 작업을 할 수 있어 하나씩 처리하는 순차적 외부 반복자보다는 효율적으로 요소를 반복시킬 수 있는 장점이 있다.

중간 처리와 최종 처리


스트림은 하나 이상 연결될 수 있다. 다음 그림을 보면 컬렉션의 오리지널 스트림 뒤에 필터링 중간 스트림이 연결될 수 있고, 그 뒤에 매핑 중간 스트림이 연결될 수 있다. 이와 같이 스트림이 연결되어 있는 것을 스트림 파이프라인 이라고 한다.
오리지널 스트림과 집계 처리 사이의 중간 스트림들은 최종 처리를 위해 요소를 걸러내거나(필터링), 요소를 변환시키거나(매핑), 정렬하는 작업을 수행한다.

profile
코딩 낭인

0개의 댓글