728x90
스트림 파이프라인이란?
여러 개의 스트림 연산을 연결하여 데이터를 처리하는 방식을 의미한다.
즉, 데이터를 스트림으로 변환한 후, 여러 중간 연산을 거쳐 최종 연산으로 결과를 얻는 과정이라고 할 수 있다.
스트림은 중간 연산과 최종 연산으로 나뉜다고 했었는데 그 중 중간 연산을 여러개 사용하여 최종 연산을 하는 경우를 마치 파이프를 따라 흐르는것 같다고 해서 파이프라인이라고 불리운다.
스트림 파이프라인의 구조
위 그림을 보면 쉽게 이해할 수 있다.
즉, 스트림에 그냥 중간 연산이 여러개가 들어가면 그게 파이프라인이 된다는거다.
스트림에 대해 잘 모른다면 아래 블로그에 정리해뒀다.
https://lold2424.tistory.com/186
[[JAVA] Stream API
Stream이란?Stream(스트림)은 Java 8에서 도입된 연속적인 데이터 흐름을 처리하는 API다.기존의 컬렉션을 반복문 없이 선언적(Declarative) 방식으로 변환, 필터링, 집계할 수 있도록 도와준다.스트림은
lold2424.tistory.com](https://lold2424.tistory.com/186)
스트림과 스트림 파이프라인의 차이점
사실 그냥 구조적으로 봤을때는 뭐야 그럼 중간 연산의 차이인데 왜 다르게 부를까? 란 생각이 들것이다.
그 이유는 아래와 같다.
Stream()
- 데이터의 흐름을 처리하는 개념
- 컬렉션, 배열, 파일 등의 데이터 소스를 변환하여 연산할 수 있는 도구
List.stream()
,Arrays.stream()
,Files.lines()
등의 형태로 생성된다.- 단순하게 데이터를 처리하는 연산 도구라 생각하면 된다.
Stream Pipeline
- 여러개의 스트림 연산을 연결한 구조
- 데이터를 여러 단계로 가공 가능
- 단순 스트림보다, 연산 흐름을 강조한 개념
즉, 스트림은 단순하게 데이터의 흐름(데이터를 처리하는 도구)을 의미하지만, 스트림 파이프라인은 데이터 가공 과정을 포함하는 개념이다.
스트림 파이프라인의 특성
- 선언적 프로그래밍
- 명령형 프로그래밍:
for
문을 사용해 직접 데이터 가공 - 선언형 프로그래밍: 스트림 api를 사용해 어떤 작업을 할지만 선언
- 명령형 프로그래밍:
- 불변성
- 원본 데이터(words 리스트)는 변경되지 않음
- 스트림 연산을 거쳐 새로운 리스트를 생성
- 병렬 처리 가능
.parallelStream()
을 사용하면 자동으로 병렬 실행- 멀티코어 CPU 환경에서 성능 최적화 가능
List<String> result = words.parallelStream()
.filter(word -> word.startsWith("a"))
.map(String::toUpperCase)
.sorted()
.collect(Collectors.toList());
사용 예시
- 단순 스트림
List<String> names = List.of("apple", "banana", "cherry", "avocado", "blueberry");
List<String> result = names.stream()
.filter(name -> name.startsWith("a")) // 필터링 처리 (중간 연산)
.collect(Collectors.toList()); // 최종 연산
System.out.println(result); // [apple, avocado]
- 스트림 파이프라인
List<String> names = List.of("apple", "banana", "cherry", "avocado", "blueberry");
List<String> result = names.stream()
.filter(name -> name.startsWith("a")) // 필터링 처리 (중간 연산)
.map(String::toUpperCase) // 매핑 처리 (중간 연산)
.collect(Collectors.toList()); // 최종 연산
System.out.println(result); // [APPLE, AVOCADO]
728x90
'백엔드 > 자바' 카테고리의 다른 글
[JAVA] Java Files API를 활용한 텍스트 및 객체 입출력 (0) | 2025.03.21 |
---|---|
[JAVA] IO, NIO, NIO2 차이점들 (0) | 2025.03.20 |
[JAVA] Stream API (0) | 2025.03.19 |
[JAVA] java.util 패키지 (0) | 2025.03.19 |
[JAVA] 람다식(Lambda) (0) | 2025.03.19 |