[JAVA] Optional.of()와 Optional.ofNullable() 차이점

Kim Sangseon·2026년 2월 4일

주요 차이점

Optional.of(T value)

  • null이 아닌 값만 허용
  • null을 전달하면 NullPointerException 발생
  • 값이 절대 null이 아님을 확신할 때 사용
String name = "John";
Optional<String> opt = Optional.of(name);  // OK

String nullName = null;
Optional<String> opt2 = Optional.of(nullName);  // NullPointerException 발생!

Optional.ofNullable(T value)

  • null일 수도 있는 값 허용
  • null이면 Optional.empty() 반환
  • 값이 null일 가능성이 있을 때 사용
String name = "John";
Optional<String> opt = Optional.ofNullable(name);  // Optional["John"]

String nullName = null;
Optional<String> opt2 = Optional.ofNullable(nullName);  // Optional.empty()

실전 사용 예시

// 1. 메서드 반환값이 null일 수 있는 경우
public Optional<User> findUserById(Long id) {
    User user = userRepository.findById(id);  // null 가능
    return Optional.ofNullable(user);  // ofNullable 사용
}

// 2. 값이 절대 null이 아닌 경우
public Optional<String> getDefaultName() {
    String defaultName = "Guest";  // 항상 값이 있음
    return Optional.of(defaultName);  // of 사용
}

// 3. 체이닝 활용
String result = Optional.ofNullable(getUserName())
    .map(String::toUpperCase)
    .orElse("UNKNOWN");

// 4. null 체크 대체
// 기존 방식
if (user != null && user.getAddress() != null) {
    return user.getAddress().getCity();
}

// Optional 방식
return Optional.ofNullable(user)
    .map(User::getAddress)
    .map(Address::getCity)
    .orElse("Unknown");

선택 기준

  • 확실히 null이 아닌 경우: Optional.of() 사용
  • null 가능성이 있는 경우: Optional.ofNullable() 사용
  • 빈 Optional이 필요한 경우: Optional.empty() 사용

0개의 댓글