"값이 있을 수도 있고 없을 수도 있는 경우"를 안전하게 처리하는 객체!
Optional<String> optional = Optional.of("Hello");
optional.ifPresent(System.out::println); // 값이 있으면 출력
null을 직접 다루면 NullPointerException(NPE)이 발생할 가능성이 큽니다.
public String getUserName(User user) {
return user.getName(); // user가 null이면 NPE 발생
}
public Optional<String> getUserName(User user) {
return Optional.ofNullable(user.getName());
}
📌 차이점:
null이 들어와도 Optional.ofNullable()이 Optional.empty()로 변환해주므로 NPE 방지!Optional은 Stream과 함께 사용할 때 더욱 강력해집니다.
Optional<User> user = userRepository.findByEmail("[email protected]");
user.map(User::getName).ifPresent(System.out::println);
📌 map()을 사용하면 값이 존재하면 변환하고, 없으면 아무 동작도 하지 않음!
Spring Data JPA에서는 findById() 메서드가 Optional을 반환하므로 안전하게 사용할 수 있습니다.