Java 8에서 도입된 스트림 API는 컬렉션, 배열 등의 데이터를 함수형 프로그래밍 스타일로 처리할 수 있는 기능을 제공합니다.
스트림 API를 사용하면 데이터 처리 파이프라인을 간결하고 가독성 있게 구성할 수 있습니다.
1. 스트림 생성
스트림은 컬렉션, 배열, I/O 채널 등 다양한 소스로부터 생성할 수 있습니다.
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); 
Stream<Integer> numberStream = numbers.stream(); 
int[] arrayOfNumbers = {1, 2, 3, 4, 5}; 
IntStream intStream = Arrays.stream(arrayOfNumbers); 
Stream<String> lines = Files.lines(Path.of(“file.txt”)); 
 | 
cs | 
2. 중간 연산
중간 연산은 스트림을 변환하거나 필터링하는 등의 작업을 수행하며, 그 결과로 새로운 스트림을 반환합니다. 중간 연산은 지연 실행(lazy evaluation)되며, 최종 연산이 호출될 때까지 실행되지 않습니다.
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
 List<String> words = Arrays.asList(“apple”, “banana”, “cherry”, “date”); 
List<String> filteredWords = words.stream() 
        .filter(word –> word.length() > 5) 
        .map(String::toUpperCase) 
        .collect(Collectors.toList()); 
System.out.println(“Filtered words: “ + filteredWords); 
 | 
cs | 
3. 최종 연산
최종 연산은 스트림 파이프라인을 실행하고 결과를 생성합니다. 최종 연산이 호출되면 스트림은 소모되며, 더 이상 사용할 수 없습니다.
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
 | 
 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); 
long count = numbers.stream() 
        .filter(num –> num % 2 == 0) 
        .count(); 
System.out.println(“Even numbers count: “ + count); 
int sum = numbers.stream() 
        .mapToInt(Integer::intValue) 
        .sum(); 
System.out.println(“Sum of numbers: “ + sum); 
 | 
cs | 
4. 기본형 스트림
스트림 API는 기본형 데이터(int, long, double 등)를 효율적으로 처리하기 위해 특별한 스트림을 제공합니다. 이를 통해 오토박싱/언박싱 오버헤드를 줄일 수 있습니다.
| 
 1 
2 
3 
 | 
 IntStream intStream = IntStream.range(1, 10); 
LongStream longStream = LongStream.rangeClosed(1, 10); 
DoubleStream doubleStream = DoubleStream.of(1.0, 2.0, 3.0); 
 | 
cs | 
5. 병렬 스트림
스트림 API는 병렬 처리를 손쉽게 구현할 수 있는 기능을 제공합니다. parallelStream() 메서드를 호출하면 병렬 스트림이 생성되며, 가능한 경우 여러 스레드에서 작업을 분할하여 처리합니다.
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
 List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
int sumOfSquares = numbers.parallelStream() 
        .mapToInt(num –> num * num) 
        .sum(); 
System.out.println(“Sum of squares: “ + sumOfSquares); 
 | 
cs | 
6. 무한 스트림
스트림 API는 무한한 요소를 가진 스트림을 생성할 수 있습니다. Stream.iterate()와 Stream.generate() 메서드를 사용하여 무한 스트림을 만들 수 있습니다.
| 
 1 
2 
3 
4 
5 
6 
 | 
 Stream<Integer> infiniteStream = Stream.iterate(0, i –> i + 1); 
List<Integer> firstTenNumbers = infiniteStream 
        .limit(10) 
        .collect(Collectors.toList()); 
System.out.println(“First ten numbers: “ + firstTenNumbers); 
 | 
cs | 
스트림 API는 Java에서 함수형 프로그래밍 스타일로 데이터를 처리할 수 있는 강력한 도구입니다. 스트림 API를 활용하면 코드를 간결하고 가독성 있게 작성할 수 있으며, 병렬 처리 등 고급 기능을 쉽게 구현할 수 있습니다.
- Oracle Java Documentation – Stream
 - Baeldung – Introduction to Java 8 Streams
 - GeeksforGeeks – Stream in Java
 - Oracle Java Tutorials – Aggregate Operations
 
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

			