2025. 11. 9. 15:20ㆍFrontend
1. Stream은 무엇인가?
Stream은 Java 8에서 도입된 데이터 처리 방식으로,
함수형 프로그래밍과 선언형 스타일을 통해 데이터를 처리한다.
기존에는 Collection을 통해 반복문으로 직접 데이터를 처리했지만,
Stream을 사용하면 데이터 흐름을 정의하는 방식으로 간결하게 표현할 수 있다.
- Collection이란?
인터페이스(List, Set, Map)와 클래스(ArrayList, HashSet, HashMap)로 구성된 자료 구조다.
Stream은 Collection과 다르게
데이터를 저장하지 않고 처리만 담당한다.
Stream은 데이터 구조가 아니며,
원본 데이터를 직접 수정하지 않고 가공된 결과를 새로운 형태로 반환한다.
2. Stream은 어떻게 데이터를 저장하지 않나?
먼저 Stream 데이터 처리 과정을 살펴보면
중간 연산과 말단 연산으로 나뉜다.

- 중간 연산
데이터를 가공하거나 변환하는 과정으로,
새로운 Stream 반환한다.
예: filter, map, distinct, sorted
- 말단 연산
Stream을 소비하며 결과를 반환한다.
예: ForEach, toArray, count
중간 연산은 지연 평가(Lazy evaluation) 방식으로 동작하기 때문에,
종단 연산이 호출되기 전가지 실제 연산이 수행되지 않는다.
int[] list = { 1, 2, 3, 4 };
Arrays.stream(list)
.filter((li) -> {
System.out.println("첫 번째 시도 → " + li);
return li % 2 == 0;
})
.filter((li) -> {
System.out.println("두 번째 시도 → " + li);
return li % 4 == 0;
})
.forEach(System.out::println); // 생략하면 아무것도 출력되지 않음
- 출력
첫 번째 시도 → 1
첫 번째 시도 → 2
두 번째 시도 → 2
첫 번째 시도 → 3
첫 번째 시도 → 4
두 번째 시도 → 4
4
Stream은 원본 데이터를 보관하지 않고,
데이터 흐름을 정의해 전달하는 구조이기 때문에
Collection처럼 데이터를 저장하는 역할을 하지 않는다.
말단 과정이 생략되면 코드는 실행되지 않는다.
3. Node.js Stream, Java Stream 차이점
Java Stream은 Collection 같은 테이터를
효율적으로 가공하기 위해 설계되었다.
Node.js Stream은 입출력 데이터를 조각(chunck) 단위로 처리하여
대용량 데이터를 효율적으로 다루는 데 최적화되어 있다.
참고
- GeeksforGeeks, "Stream in Java"
- W3Schools, "Java Collections"
- GeeksforGeeks, "Java Collection Tutorial"
- Elvanov, "Java Stream 정리"
- 김정환, "Node.js Stream 완벽 가이드"
- Coding Tech Room, "JavaScript Equivalents Java Streams API"
- Stack Overflow, "Java 8 Stream vs Collection Storage"
- Stack Overflow, "JavaScript Equivalents for Java Streams API"
'Frontend' 카테고리의 다른 글
| Java 의문점 정리 3 — Map 종류와 동작방식 (0) | 2025.11.18 |
|---|---|
| Java 의문점 정리 2 — @ 기호와 주석 (0) | 2025.11.12 |
| Java 의문점 정리 1 — JavaScript와의 차이점 (1) | 2025.11.07 |
| PostgreSQL RLS는 언제, 어떻게 적용해야 할까: 장단점 및 의문 정리 (0) | 2025.10.12 |
| PostgreSQL RLS(Row Level Security) 내부 동작 알아보기 (0) | 2025.10.11 |