Closed chaewon-io closed 1 year ago
Optional은 null값을 처리하기 위해 사용되는데요, null체크를 명시적으로 수행하고 코드의 안정성을 높이기 위해 사용합니다. 그리고 메서드체이닝을 지원하기 때문에 값을 처리함과 동시에 코드를 간결하게 작성할 수 있습니다.
Optional<String> str = Optional.ofNullable(getName())
.map(name -> name.toLowerCase())
.filter(name -> name.contains("hanbonghun"))
.orElse("Default");
하지만 Optional을 사용하는 것은 결국 Optional이라는 객체를 생성하는 것이므로 추가적인 오버헤드가 발생합니다. 그리고 객체를 생성하고 가져오는 과정에서 null체크를 반복하므로 코드 실행 속도가 느려질 수 있습니다. 따라서 메서드가 항상 null이 아닌 값을 반환하거나, null값을 반환하더라도 해당 값을 무시할 수 있는 경우에는 사용하지 않는 것이 좋습니다.
책 p168 - 169
책에서는 null을 반환하는 것은 쉽게 에러를 일으킬 수 있으므로 자바 8에서 컨테이너 클래스인 Optional이 만들어졌다고 합니다.
그러나 이러한 Optional을 사용하는 것이 항상 좋아 보이진 않습니다. 어떤 경우에 사용하는 것이 적절하지 않은지 궁금합니다.