Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 Stream API에 새롭게 추가된 4가지 핵심 메서드 완벽 정리


Java 9에서 Oracle은 Stream API에 실무에서 유용하게 활용할 수 있는 네 가지 새로운 메서드를 추가했습니다. 바로 iterate(), ofNullable(), takeWhile(), 그리고 dropWhile()입니다. 각 메서드의 동작 방식과 예제 코드를 자세히 살펴보겠습니다.

1. iterate()

iterate() 메서드는 기존의 전통적인 for 루프를 스트림 방식으로 대체할 수 있는 기능입니다. Java 9에서는 종료 조건을 표현하는 Predicate 인터페이스가 매개변수로 추가되어, 이전 버전처럼 무한히 요소를 생성하는 대신 정의된 조건을 만족하는 동안만 요소를 생성하도록 개선되었습니다.

예제

import java.util.stream.Stream;

public class StreamIterateMethodTest {
    public static void main(String[] args) {
        Stream.iterate(1, i -> i < 5, i -> i + 1)
              .forEach(System.out::println); // iterate()
    }
}

실행 결과

1
2
3
4

2. ofNullable()

ofNullable() 메서드는 전달된 요소가 null이 아닌 경우 해당 요소 하나를 포함하는 스트림 객체를 반환하고, null인 경우에는 빈(empty) 스트림을 반환합니다. 덕분에 NullPointerException을 걱정하지 않고도 null 값을 안전하게 스트림으로 처리할 수 있습니다.

예제

import java.util.stream.Stream;

public class StreamOfNullableMethodTest {
    public static void main(String[] args) {
        String str = "TutorialsPoint";
        Stream.ofNullable(str)
              .forEach(System.out::println); // ofNullable() 메서드
    }
}

실행 결과

TutorialsPoint

3. takeWhile()

takeWhile() 메서드는 매개변수로 Predicate 인터페이스를 받습니다. 이 메서드는 스트림의 요소를 왼쪽에서 오른쪽으로 순회하면서, Predicate 조건이 참인 동안 계속해서 요소를 가져오다가 조건이 처음으로 거짓이 되는 순간 중단합니다.

예제

import java.util.stream.Stream;

public class StreamTakeWhileMethodTest {
    public static void main(String[] args) {
        Stream.of(1, 2, 3, 4, 5)
              .takeWhile(i -> i < 5) // takeWhile() 메서드
              .forEach(System.out::println);
    }
}

실행 결과

1
2
3
4

4. dropWhile()

dropWhile() 메서드 역시 Predicate 인터페이스를 매개변수로 받으며, takeWhile()과 정반대로 동작합니다. 이 메서드는 스트림의 요소를 왼쪽에서 오른쪽으로 순회하면서 조건을 만족하는 모든 요소를 무시(버리고)하고, 조건이 처음으로 거짓이 되는 지점부터 나머지 모든 요소를 그대로 반환합니다.

예제

import java.util.stream.Stream;

public class StreamDropWhileMethodTest {
    public static void main(String[] args) {
        Stream.of(3, 2, 1, 4, 6, 7, 8, 9, 10)
              .dropWhile(i -> i < 5) // dropWhile() 메서드
              .forEach(System.out::println);
    }
}

실행 결과

6
7
8
9
10

마무리

Java 9의 Stream API에 추가된 이 네 가지 메서드를 활용하면 반복문 없이도 더 간결하고 선언적인 방식으로 데이터 흐름을 제어할 수 있습니다. 특히 iterate()는 for 루프 대체, takeWhile()/dropWhile()은 조건 기반 필터링, ofNullable()은 null 안전 처리에 유용하므로 실무 코드에서 적극적으로 활용해 보시기 바랍니다.