Java Optional

유비빅·2023년 8월 8일
  1. Optional은 비싸다
  • 메서드가 반환할 결과값이 '없음'을 명백하게 표현할 필요가 있고, null을 반환하면 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용하자는 것이 Optional을 만든 주된 목적
  • 단순 값을 얻기 위해선 Optional 대신 null 비교
return status != null ? status : READY;
  1. isPresent()-get() 대신 orElse()/orElseGet()/orElseThrow()
Optional<Member> member = ...;
return member.orElseThrow(() -> new NoSuchElementException());
  1. Optional을 필드로 사용 금지
    Optional은 필드에 사용할 목적으로 만들어지지 않았으며, Serializable을 구현하지 않았다.

  2. Optional을 컬렉션의 원소로 사용 금지
    컬렉션에는 많은 원소가 들어갈 수 있다. 따라서 비싼 Optional을 원소로 사용하지 말고 원소를 꺼낼 때나 사용할 때 null 체크하는 것이 좋다. 특히 Map은 getOrDefault(), putIfAbsent(), computeIfAbsent(), computeIfPresent() 처럼 null 체크가 포함된 메서드를 제공하므로, Map의 원소로 Optional을 사용하지 말고 Map이 제공하는 메서드를 활용하는 것이 좋다.

  3. of(), ofNullable() 혼동 주의
    of(X)은 X가 null이 아님이 확실할 때만 사용해야 하며, X가 null이면 NullPointerException 이 발생한다.
    ofNullable(X)은 X가 null일 수도 있을 때만 사용해야 하며, X가 null이 아님이 확실하면 of(X)를 사용해야 한다.

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

잘 봤습니다. 좋은 글 감사합니다.

답글 달기