주요 차이점
Optional.of(T value)
- null이 아닌 값만 허용
- null을 전달하면
NullPointerException 발생
- 값이 절대 null이 아님을 확신할 때 사용
String name = "John";
Optional<String> opt = Optional.of(name);
String nullName = null;
Optional<String> opt2 = Optional.of(nullName);
Optional.ofNullable(T value)
- null일 수도 있는 값 허용
- null이면
Optional.empty() 반환
- 값이 null일 가능성이 있을 때 사용
String name = "John";
Optional<String> opt = Optional.ofNullable(name);
String nullName = null;
Optional<String> opt2 = Optional.ofNullable(nullName);
실전 사용 예시
public Optional<User> findUserById(Long id) {
User user = userRepository.findById(id);
return Optional.ofNullable(user);
}
public Optional<String> getDefaultName() {
String defaultName = "Guest";
return Optional.of(defaultName);
}
String result = Optional.ofNullable(getUserName())
.map(String::toUpperCase)
.orElse("UNKNOWN");
if (user != null && user.getAddress() != null) {
return user.getAddress().getCity();
}
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown");
선택 기준
- 확실히 null이 아닌 경우:
Optional.of() 사용
- null 가능성이 있는 경우:
Optional.ofNullable() 사용
- 빈 Optional이 필요한 경우:
Optional.empty() 사용