Optional 소개
자바 프로그래밍에서 NullPointerException을 종종 보게 되는 이유
•
null을 리턴하니까! && null 체크를 깜빡 했으니까!
메서드에서 작업 중 특별한 상황에서 값을 제대로 리턴할 수 없는 경우 선택할 수 있는 방법
•
예외를 던진다. (비싸다, 스택트레이스를 찍어두니까.)
•
null을 리턴한다. (비용 문제가 없지만 그 코드를 사용하는 클라이언트 코드가 주의해야 한다.
•
(자바 8부터) Optional을 리턴한다. (클라이언트에 코드에게 명시적으로 빈 값일수도 있다는 걸 알려주고, 빈 값인 경우에 대한 처리를 강제한다.
Optional
•
오직 값 한 개가 들어있을 수도 없을 수도 있는 컨테이너.
Stream API를 사용할때도 Optional을 리턴하는 오퍼레이션들이 몇몇 있다. (종료형 오퍼레이션)
주의할 것
•
리턴값으로만 쓰기를 권장한다.
(메서드 매개변수 타입, 맵의 키 타입, 인스턴스 필드 타입으로 쓰지 말자.)
•
Optional을 리턴하는 메서드에서 null을 리턴하지 말자.
•
프리미티브 타입용 Optional이 따로 있다. OptionalInt, OptionalLong, …
•
Collection, Map, Stream Array, Optional은 Optional로 감싸지 말 것.
참고
•
이펙티브 자바 3판, 아이템 55. 적절한 경우 Optional을 리턴하라.
Optional API 종류
Optional 만들기
Optional에 값이 있는지 없는지 확인하기
Optional에 있는 값 가져오기
Optional에 값이 있는 경우에 그 값을 가지고 ~~를 하라.
Optional에 값이 있으면 가져오고 없는 경우에 ~~를 리턴하라.
Optional에 값이 있으면 가져오고 없는 경우에 ~~를 하라.
Optional에 값이 있으면 가져오고 없는 경우 에러를 던져라.
Optional에 들어있는 값 걸러내기
Optional에 들어있는 값 변환하기