본문 바로가기
Java

Java Optional

by 오렌지마끼야또 2022. 7. 29.
728x90
반응형

 

 

 

Optional이란?

 - null이 될 수도 있는 객체를 감싸고 있는 일종의 래퍼 클래스

 

 

 

Optional 을 사용하는 이유

 - 기존에 런타임 시 NPE(NullPointerException)이 발생하는 것을 방어하기 위해 null check 로직을 추가하게 되어 가독성 떨어짐

 - 이러한 것을 개선하기 위해 JAVA8에 java.util.Optional<T>라는 새로운 클래스가 추가 됨

 

 


객체 생성

 

Optional.empty()

 - null을 담고 있는 Optional 객체를 얻어옴

return Optional.empty();

 

Optional.of(value)

 - null이 아닌 객체를 담고 있는 Optional 객체를 생성

 - null이 넘어올 경우, NPE를 던지기 때문에 주의해서 사용

object = List.of()
return Optional.of(object);

 

 Optional.ofNullable(value)

 - null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체 생성

 - Optional.empty()와 Optional.of(value)를 합쳐놓은 메소드

 - Optional.of(value)의 경우 null이 넘어오게 되면 NPE를 던지지만 이건 null이 넘어오면 비어있는 Optional 객체를 줌

 - 해당 객체가 null인지 아닌지 자신없는 상황에서는 이 메소드를 사용

return Optional.ofNullable(null);

 

 


Optional이 담고 있는 객체 접근

 

dto.get()

 - 비어있는 Optional 객체에 대해서, NoSuchElementException을 던짐

 

dto.orElse(T other)

 - 옵셔널이 비어 있다면 파라미터로 입력한 value를 리턴하게 됨

 

dto.orElseGet(Supplier<? extends T> other)

 - 비어있는 Optional 객체에 대해서, 넘어온 함수형 인자를 통해 생성된 객체를 반환

 - orElse(T other) 메소드와 동일하게 리턴 하지만 비어있는 경우만 함수를 호출해서 성능상 이점 기대 가능

 

dto.orElseThrow(Supplier<? extends X> exceptionSupplier)

 - 비어 있는 Optional객체에 대해, 넘어온 함수형 인자를 통해 생성된 예외를 던짐

 

 

 

 

 

 

 

참고 사이트

https://developsd.tistory.com/127

 

 

 

 

 

 

728x90
반응형

댓글