본문 바로가기
자바

[자바] Java8 Optional 옵셔널

by jeonghaemin 2020. 12. 24.
728x90

자바 8에서 추가된 Optional는 T타입의 객체를 감싸는 래퍼클래스이다.

public final class Optional<T> {

    private final T value;

}

값을 직접 반환하지 않고 이렇게 한번 감싸서 반환하면, 매번 if문을 사용하여 null체크를 하지 않아도 Optional에 있는 메서드를 이용해서 NullPointerException이 발생하지 않는 보다 간결하고 안전한 코드를 작성할 수 있다.

Optional 객체 생성하기

  • Optional.of(T value)
  • Optional.ofNullable(T value)
  • Optional.empty()

of 메서드는 매개변수의 값이 null이면 NullPionterException을 발생시키기 때문에, 값이 null일 가능성이 있으면 ofNullable메서드를 사용해야한다.

String str = "Hello world!";
Optional<String> optionalOf = Optional.of(str);
Optional<String> optionalOf = Optional.ofNullable(null);

Optional.empty() 메서드를 사용하면 비어있는 객체로 초기화 할 수 있다. 만약 값이 없다면 null로 초기화하는 것보다 empty 메서드를 사용하는 것이 좋다.

Optional<Integer> empty = Optional.empty();

Optional 객체 값 불러오기

  • get() : optional 객체에 저장된 값을 반환한다.
Optional<String> optional = Optional.of("Hello World!");
String str = optional.get() // "Hello World!"

get메서드 사용시 값이 null이거나 비어있으면 NoSuchElementException이 발생한다.

  • orElse(T other) : 값이 비어있거나 null이면 매개변수로 전달된 값을 반환한다.
  • orElseGet(Supplier<? extends T> supplier) : 값이 비어있거나 null이면 람다식을 통해 반환된 값을 반환한다.
  • orElseThrow(Supplier<? extends X> exceptionSupplier) : 값이 비어있거나 null이면 지정된 예외를 발생시킨다.
Optional<String> optional = Optional.empty();

//null이면 "Hello" 반환
optional.orElse("Hello");

//null이면 "Hello" 반환
optional.orElseGet(() -> new String("Hello"));

//null이면 NullPointerException 발생
optional.orElseThrow(NullPointerException::new);
  • isPresent() : Optional 객체의 값이 비어있거나 null이면 false, 아니면 true 반환
  • ifPresent(Consumer<? super T> action) : Optional 객체의 값이 null이거나 비어있는게 아니면 매개변수로 넘겨준 코드 실행
Optional<String> optional = Optional.ofNullable("Hello");
optional.isPresent(); //true
optional.ifPresent(System.out::println);

댓글