[Java] Null-Safe하게 Optional을 사용하는 방법

4834 단어 JavaJava

NullSafe 하게 Optional 함수를 반환하는 방법에 대해서 알아보겠다.
일단, 반환값이 int / long / double 이라면 Optianl<> 을 사용하는 것보다 OptionalInt / OptionalLong / OptionalDouble을 사용하는 것이 좋다.

아래 예제의 getSumOfNum은 리스트에 특정 숫자를 포함한 원소를 필터링하여 총 합을 구하는 함수이다.

예시코드

OptionalInt optionalSum = getSumOfNum("2");
Integer sumOfNum = optionalSum.orElse(0); // same as optionalSum == nul ? 0 : optionalSum;

public static OptionalInt getSumOfNum(String n) {
	List<String> strNum = List.of("144", "234", "222", "555", "777");
	    
 	Integer sumOfNum = strNum.stream()
                            .filter(x -> x.contains(n))
                            .mapToInt( value -> Integer.parseInt(value))
  			    .sum();
	    
	return sumOfNum == null ? OptionalInt.empty() : OptionalInt.of(sumOfNum);
    }

결론부터 말하면, Optional.ofNullable()의 사용을 지양하는 것이 Null-Safe한 방법이다.
총 합이 null이면 null이 아닌 OptionalInt.empty()를 반환해주고, null이 아니면 OptionalInt.of()를 반환 해준다.
함수를 사용하여 값을 받아오는 OptionalSum은 OptionalInt로 받아오고, sumOfNum에서 orElse()를 사용한다.
이로써 Optional.ofNullable()를 사용하지 않는 것이 Null-Safe 한 방법이다.

참고

Optional에서는 Optional.of()는 Optional.ofNullable()과는 다르게 값이 null이 아님이 확실한 경우에만 사용한다. (null이 들어오면 NPE를 뱉는다.)

좋은 웹페이지 즐겨찾기