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

자바 8에서는 새로운 날짜와 시간 API인 java.time 패키지가 도입되었습니다. 이 API를 사용하면 날짜와 시간을 더 효율적으로 다룰 수 있습니다. 그러나 이 API에서는 기본적으로 Nullable을 지원하지 않기 때문에 값이 없는 경우에는 null 대신에 다른 방법을 사용해야 합니다. 이번 글에서는 자바 8 날짜와 시간 API에서 Nullable을 사용하는 방법에 대해 알아보겠습니다.

Nullable 처리 방법

자바 8에서는 Nullable을 처리하기 위해 Optional 클래스를 제공합니다. Optional은 값이 있을 수도 있고 없을 수도 있는 객체를 감싸는 래퍼 클래스로, 값이 없는 경우에는 빈 Optional을 반환합니다. 따라서 Nullable 필드를 Optional로 선언하면 값이 없는 경우에는 null 대신에 Optional.empty()를 사용할 수 있습니다.

import java.util.Optional;

public class Person {
    private String name;
    private Optional<LocalDate> birthDate;

    // constructor and getters and setters
}

위의 예제에서 birthDate 필드는 Optional로 선언되어 있습니다. 이렇게 선언하면 birthDate가 Nullable이므로 값이 없는 경우에는 Optional.empty()가 반환됩니다.

Nullable 값 설정하기

Nullable 필드에 값을 설정하기 위해서는 Optional 클래스의 of() 메서드나 ofNullable() 메서드를 사용합니다. of() 메서드는 널이 아닌 값을 가정하고, ofNullable() 메서드는 Nullable 값을 가정합니다.

Person person = new Person();
person.setName("John");
person.setBirthDate(Optional.ofNullable(LocalDate.parse("1990-01-01")));

위의 예제에서 setBirthDate() 메서드에 Optional.ofNullable()을 사용하여 Nullable 값을 설정합니다. 이렇게 설정한 Nullable 값은 필요에 따라 Optional 클래스의 메서드를 사용하여 처리할 수 있습니다.

Nullable 값 사용하기

Nullable 필드의 값을 사용하기 위해서는 Optional 클래스의 메서드를 사용합니다. 예를 들어, Nullable 필드의 값이 있는 경우에는 ifPresent() 메서드를 사용하여 값을 사용할 수 있습니다.

person.getBirthDate().ifPresent(date -> System.out.println("Birthdate: " + date));

위의 예제에서 ifPresent() 메서드는 Nullable 필드의 값이 있는 경우에만 람다 표현식을 실행합니다. 따라서 콘솔에는 생년월일이 출력되게 됩니다.

결론

자바 8 날짜와 시간 API에서 Nullable을 다루기 위해서는 Optional 클래스를 사용하면 됩니다. Nullable 필드는 Optional로 선언하여 값이 없는 경우에는 Optional.empty()를 사용할 수 있습니다. 이를 통해 더 안전하고 간결한 코드를 작성할 수 있습니다.

참고 자료