Item 55. Optional
옵셔널 반환은 신중히 하라
자바에서는 메서드 결과 값을 반환할 수 없을 때 아래 세 가지 선택지가 존재한다.
예외 던지기
null 반환
Optional 반환
이 중 null을 반환하는 것이 가장 유연하고 사용하기 쉬우며, null 반환 메서드보다 오류 가능성이 적다. 만약 Optional 반환을 사용한다고 했을 땐 절대 null을 반환하지 말아야 한다.(Optional 정책 위반) 반환값이 없을 수 있으며, 클라이언트에게 이를 명확하게 알려줘야 할 때 Optional을 반환하는 것이 좋다.
class Example {
public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
if (c.isEmpty()) {
return Optional.empty();
}
E result = null;
for (E e : c) {
if (result == null || e.compareTo(result) > 0) {
result = Objects.requireNonNull(e);
}
}
return Optional.of(result);
}
}
Optional 반환의 단점
많은 이점을 주는 Optional이지만 컬렉션, 맵, 스트림, 배열, 옵셔널 같은 컨테이너 타입에는 Optional을 반환하는 것이 적합하지 않다.
컬렉션 / 배열: 컬렉션과 배열은 이미 빈 컬렉션과 배열을 반환할 수 있기 때문에 Optional을 반환할 필요가 없다.
맵: 키가 없다는 사실이 두 가지 방식으로 표현되기 때문에 혼란을 줄 수 있다.
그 외: 성능에 민감한 상황에서는 Optional을 반환하는 것이 적합하지 않다.
Last updated
Was this helpful?