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

Java 9 Stream의 ofNullable() 메서드란? 언제, 어떻게 사용해야 할까?

ofNullable() 메서드는 Stream 클래스에 포함된 정적(static) 메서드로, 전달된 값이 null이 아니면 해당 요소 하나만 담고 있는 순차 스트림(sequential stream)을 반환하고, null이면 빈 스트림(empty stream)을 반환합니다.

Java 9에서 새롭게 도입된 이 메서드는 스트림 처리 과정에서 발생할 수 있는 NullPointerException을 방지하고, 값이 null인지 매번 확인하는 번거로운 null 검사 코드를 제거해 줍니다. 즉, ofNullable() 메서드의 핵심 목적은 값이 null일 때 예외 없이 안전하게 빈 스트림을 반환받는 것입니다.

문법(Syntax)

static <T> Stream<T> ofNullable(T t)

주요 특징

  • 인자로 전달된 값이 null이 아니면: 요소 1개를 가진 스트림 반환
  • 인자로 전달된 값이 null이면: 아무 요소도 없는 빈 스트림 반환
  • Java 8까지는 삼항 연산자나 조건문으로 null 여부를 직접 판단해야 했지만, Java 9부터 이 메서드 하나로 깔끔하게 해결됩니다.

예제 1 — count()로 동작 확인하기

import java.util.stream.Stream;
public class OfNullableMethodTest1 {
    public static void main(String args[]) {
        System.out.println("TutorialsPoint");
        int count = (int) Stream.ofNullable(5000).count();
        System.out.println(count);
        System.out.println("Tutorix");
        count = (int) Stream.ofNullable(null).count();
        System.out.println(count);
    }
}

실행 결과

TutorialsPoint
1
Tutorix
0

결과 분석

  • Stream.ofNullable(5000) → 5000은 null이 아니므로 요소 1개를 가진 스트림이 생성되어 count 결과가 1이 됩니다.
  • Stream.ofNullable(null) → null이므로 빈 스트림이 생성되어 count 결과가 0이 됩니다.

예제 2 — forEach()와 함께 사용하기

import java.util.stream.Stream;
public class OfNullableMethodTest2 {
    public static void main(String args[]) {
        String str = null;
        Stream.ofNullable(str).forEach(System.out::println); // 콘솔에 아무것도 출력되지 않음
        str = "TutorialsPoint";
        Stream.ofNullable(str).forEach(System.out::println); // TutorialsPoint 출력됨
    }
}

실행 결과

TutorialsPoint

결과 분석

str이 null일 때는 빈 스트림이 생성되기 때문에 forEach()가 실행되어도 출력되는 내용이 없습니다. 반면 str에 실제 문자열이 할당된 후에는 해당 값을 가진 스트림이 생성되어 정상적으로 콘솔에 출력됩니다.

ofNullable() 메서드를 사용하면 좋은 경우

  • 외부 API나 DB 조회 결과처럼 null이 나올 수 있는 값을 스트림 파이프라인에 연결할 때
  • if (value != null) 같은 반복적인 null 체크 코드를 제거하고 싶을 때
  • null 가능성이 있는 단일 객체를 컬렉션이나 배열로 감싸지 않고 바로 스트림으로 변환하고 싶을 때

이처럼 Stream.ofNullable()은 null 처리를 스트림 API 안으로 자연스럽게 통합해 주는 유용한 기능으로, Java 9 이상 환경에서 null-safe한 스트림 코드를 작성할 때 적극적으로 활용할 수 있습니다.