자바 8에서는 ‘선택형값’ 개념의 영향을 받아서 java.util.Optional<T>
라는 새로운 클래스를 제공한다.
Optional은 선택형값을 캡슐화하는 클래스다.
값이 있으면 Optional 클래스는 값을 감싼다. 반면 값이 없으면 Optional.empty 메서드로 Optional을 반환한다.
Optional.empty는 Optional의 특별한 싱글턴 인스턴스를 반환하는 정적 팩토리 메서드이다.
null을 참조하려 하면 NullPointerException이 발생하지만 Optional.empty()는 Optional 객체이므로 다양한 방식으로 활용이 가능하다.
Optional을 사용하면 값이 없는 상황이 우리 데이터에 문제가 있는 것인지 아니면 알고리즘의 버그인지 명확하게 구분할 수 있다. 모든 null 참조를 Optional로 대치하는 것은 바람직하지 않다. Optional의 역할은 더 이해하기 쉬운 API를 설계하도록 돕는 것
이다. 즉, 메서드의 시그니처만 보고도 선택형값인지 여부를 구별할 수 있다.