[java] 자바 8 날짜와 시간 API에서 Optional 활용하기

자바 8에서 도입된 새로운 날짜와 시간 API (java.time 패키지)는 기존의 java.util.Datejava.util.Calendar에 비해 훨씬 강력하고 유연한 기능을 제공합니다. 이 중에서도 Optional을 활용하여 날짜와 시간을 다루는 방법에 대해 알아보겠습니다.

Optional은 자바 8에서 도입된 클래스로, 값의 존재 여부를 나타내는 컨테이너입니다. 이를 사용하면 값을 감싸고, 값이 있는지 여부를 체크하거나 값을 안전하게 처리할 수 있습니다.

Optional 클래스 사용하기

Optional은 다음과 같이 생성할 수 있습니다.

Optional<LocalDateTime> optionalDateTime = Optional.of(LocalDateTime.now());

값이 없을 수도 있는 경우에는 Optional.empty() 메서드를 사용하여 빈 Optional을 생성할 수도 있습니다.

Optional<LocalDateTime> optionalDateTime = Optional.empty();

또는 값이 없을 때 기본값으로 대체할 수도 있습니다.

Optional<LocalDateTime> optionalDateTime = Optional.ofNullable(null);
LocalDateTime dateTime = optionalDateTime.orElse(LocalDateTime.now());

Optional을 활용한 날짜와 시간 다루기

Optional은 요소의 존재 여부를 확인하고 값을 안전하게 가져올 수 있는 메서드들을 제공합니다. 이를 활용하여 날짜와 시간을 다루어 보겠습니다.

Optional<LocalDateTime> optionalDateTime = Optional.ofNullable(getDateTime());
optionalDateTime.ifPresent(dt -> System.out.println("현재 시간은 " + dt));

LocalDateTime dateTime = optionalDateTime.orElseThrow(() -> new RuntimeException("값이 없습니다."));

위의 예제에서는 getDateTime() 메서드를 호출하여 날짜와 시간을 가져오고, 이를 Optional로 감싸서 값을 처리하는 방법을 보여줍니다. ifPresent() 메서드를 사용하여 값이 존재하는 경우에만 처리할 수 있고, orElseThrow() 메서드를 사용하여 값이 없는 경우에 예외를 발생시킬 수도 있습니다.

또한, Optional에는 다양한 메서드들이 제공되어 날짜와 시간을 다루는 과정에서 다양한 옵션을 선택할 수 있습니다. map(), flatMap(), filter() 등을 사용하여 원하는 처리를 할 수 있습니다.

결론

자바 8에서 도입된 날짜와 시간 API는 Optional을 활용하여 날짜와 시간을 다루는 것에 대해 편리한 기능을 제공합니다. Optional을 적절히 활용하면 값을 안전하게 처리하고, 예외 상황을 대비할 수 있습니다. 따라서 Optional을 적극적으로 활용하여 날짜와 시간을 다루는 코드를 작성하는 것을 권장합니다.


References: