oguri's garage

`null` 대신 `Optional.empty`를 return 해야 하는 이유 본문

개발하다/Java

`null` 대신 `Optional.empty`를 return 해야 하는 이유

oguri 2025. 9. 30. 15:44

 

Java에서 "값이 없음"을 null로 반환하는 대신 Optional.empty()를 사용하면, 코드의 안정성과 가독성을 크게 향상할 수 있다.


Optional<T>은 "결과값이 없을 수도 있다"는 것을 명시적으로 표현하는 컨테이너이다.

 

 


 

nullOptional의 핵심 차이

 

구분 null 반환 Optional<T> 반환
안전성 호출자가 null 체크를 누락하면 NullPointerException 발생. Optional 객체 자체가 null이 아니므로 NPE 발생 위험이 없음.
가독성/의도 메서드 시그니처만으로 "값 없음" 가능성을 알기 어려움. Optional<T> 반환 타입만으로 "값이 없을 수 있다"는 사실을 명시적으로 전달.
처리 방식 if (obj != null) 같은 명령형 코드가 반복됨. ifPresent(), orElse()안전하고 선언적인 API를 사용하도록 유도.

 

 


 

상황별 "값 없음" 처리 방법

  1. 단일 값을 반환하지만 결과가 없을 때 → Optional<T>
    • 상황: ID로 특정 엔티티를 조회하는 경우 (findUserById(id))
    • 설명: 조회 결과가 단 하나이거나 없을 수 있는 상황입니다. 이럴 때 Optional을 사용해 반환하는 것이 가장 적합하다. 결과가 없으면 Optional.empty()를 반환하여 호출자가 후속 처리를 안전하게 하도록 만든다.
  2. 여러 값을 담은 컬렉션을 반환할 때 → 빈 컬렉션(Empty Collection)
    • 상황: 특정 조건을 만족하는 모든 엔티티를 조회하는 경우 (findProductsInStock())
    • 설명: 이때는 Optional<List<T>>가 아니라 빈 리스트(Collections.emptyList())를 반환하는 것이 좋다. 호출자는 결과가 있든 없든 null 체크 없이 for-each 루프를 바로 사용할 수 있어 코드가 간결해진다.