자바는 코틀린과 달리 null 값처리가 매끄럽지 못하다. 예를 들면 null 값을 참조하여 메소드를 잘 못 불러오게 된다고 하면 NPE가 드면서 문제가 생긴다. 이러한 문제를 해결하기 위해서 기존의 객체를 Optional로 감싸서 null 값 처리를 매끄럽게 하자는 것이 기본적인 생각이다.
필자는 옵셔널 보다 옵셔널을 스트림에서 어떻게 사용할지에 좀더 관심이 있기 때문에 이를 위주로 설명하겠다.
List<Optional<Integer>> res3 = list.stream()
.map(Optional::ofNullable)
.collect(Collectors.toList());
만약 객체에서 null 값이 있을 수 있다면 optional로 위 코드와 같이 변환하여 사용하는 것이 좋다.
Optional<Integer> op = Optional.ofNullable(10);
Integer r1 = op.get();
Integer r2 = op.orElse(-1);
Integer r3 = op.orElseThrow(() -> new IllegalArgumentException("error"));
optional에 관해서 내용이 생각보다 많고 사람들이 이 옵셔널을 개발자의 개발 취지와 다르게 쓰는 경우가 많아서 사실 흥미로운 점도 있어서 현재 내용을 정리하는게 너무 힘들다. 추후 다시 이 글을 수정해서 올리도록 하겠다.