자바에서 Optional 클래스는 값을 포함할 수도 있고 포함하지 않을 수도 있는 컨테이너 객체입니다. 주로 메소드의 반환값으로 사용되며, 반환값이 null일 가능성이 있는 경우에 대한 안전한 처리를 도와줍니다.
개발은 그 의도가 명확할수록 가독성과 유지보수성이 올라갑니다. Optional을 적용하면 다른 개발자에게 해당 메소드의 반환값이 null일 수 있다는 것을 명확하게 알려줄 수 있습니다.
Optional 클래스를 사용하면 명시적으로 값이 존재하는지 확인할 수 있으므로, 실수로 인한 NullPointerException을 방지할 수 있습니다.
Optional 클래스는 함수형 프로그래밍 스타일을 지원하는 메소드들을 제공합니다. 예를 들어, map()
, flatMap()
, filter()
, ifPresent()
, orElse()
, orElseGet()
등의 메소드를 사용할 수 있습니다. 이를 통해 코드를 더 간결하고 읽기 쉽게 작성할 수 있습니다.
간단한 예제를 통해 Optional 클래스의 사용법을 살펴봅시다.
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public Optional<User> findUserById(Long userId) {
return Optional.ofNullable(userRepository.findById(id));
}
}
위 예제에서 findUserById() 메소드는 Optional를 반환합니다. 이를 통해 사용자가 존재하지 않을 수 있다는 것을 명시적으로 표현하고, null 처리를 안전하게 할 수 있습니다.
UserService userService = new UserService();
Optional<User> optionalUser = userService.findUserById(1);
if (optionalUser.isPresent()) {
User user = optionalUser.get();
System.out.println("User found: " + user.getName());
} else {
System.out.println("User not found");
}
이렇게 Optional 클래스를 사용하면 가독성 향상으로 인해 개발자가 쉽게 대응할 수 있으므로 코드의 안전성을 높일 수 있습니다.
물론 무엇이든 남발하지 않고 적절히 사용하는 것이 중요합니다.