Optional

김지원·2023년 8월 17일

https://mangkyu.tistory.com/70


NPE(NullPointerException)

null인 값에 접근할때 오류


Optional

Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와준다.
Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다.
Optional는 클래스이기 때문에 각종 메소드를 제공해준다.


Optional 생성하기:

Optional.of(value): 주어진 값으로 Optional 객체를 생성합니다. 값이 null이면 NullPointerException이 발생합니다.

Optional.ofNullable(value): 주어진 값으로 Optional 객체를 생성합니다. 값이 null이어도 문제 없이 Optional.empty()를 반환합니다.

Optional.empty(): 빈 Optional 객체를 생성합니다.


isPresent()
null인지 아닌지 불리언으로


get()
Optional에 담긴 값을 반환함.
없는 경우에는 NoSuchElementException이 발생합니다.

근데 이걸 쓰면 Optional 쓰는 의미가 없다


값 가져오기 (기본값 설정 가능):

orElse(기본값): 값이 존재하면 해당 값을 반환하고, null이면 주어진 기본값을 반환합니다.

orElseGet(Supplier<? extends T> supplier): 값이 존재하면 해당 값을 반환하고, 없는 경우에는 주어진 Supplier 함수에서 생성한 값을 반환합니다.

orElseThrow(Supplier<? extends X> exceptionSupplier): 값이 없는 경우에 주어진 예외를 발생시킵니다.

  return opt.orElseThrow(() -> new Exception("asd"));

Optional.ofNullbale() - 값이 Null일수도, 아닐수도 있는 경우
만약 어떤 데이터가 null이 올 수도 있고 아닐 수도 있는 경우에는 Optional.ofNullbale로 생성할 수 있다. 그리고 이후에 orElse 또는 orElseGet 메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.


https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/

isPresent()-get() 대신 orElse()/orElseGet()/orElseThrow() 쓰자

// 안 좋음
Optional<Member> member = ...;
if (member.isPresent()) {
    return member.get();
} else {
    return null;
}

// 좋음
Optional<Member> member = ...;
return member.orElse(null);



// 안 좋음

Optional<Member> member = ...;
if (member.isPresent()) {
    return member.get();
} else {
    throw new NoSuchElementException();
}

// 좋음
Optional<Member> member = ...;
return member.orElseThrow(() -> new NoSuchElementException());
profile
https://github.com/k7850

0개의 댓글