Optional<T>란?
Optional 클래스는 '<T>'타입의 객체를 포장해주는 wrapper calss이다.
Java 8부터 도입되었으며 NPE(NullPointerExecption)이 발생하지않도록 도와준다.
public final class Optional {
private final T value;
...
}
Optiona클래스는 위와같이 value값을 저장하기떄문에 NPE가 발생하지않고
만약 null값인데 접근하려한다면 NoSuchElementException이 발생한다.
사용법
값이 null인경우
Optional opt = Optional.empty();
System.out.println(opt); // Optional.empty
System.out.println(opt.isPresent()); // false
null값일 경우엔 optional.empty()를 이용해 객체를 만들수있다.
값이 null이 아닌경우
Optional opt = Optional.of("string")
Optional opt = Optional.of(null) // NPE 발생
값이 null이 아닐경우에는 Optional.of()로 객체를 만들수있다.
만약 Optiona.of()에 null을 넣을시에는 NPE가 발생한다.
값이 null일수도 아닐수도 있을경우
Optional opt1 = Optional.ofNullable("string");
Optional opt2 = Optional.ofNullable(null);
System.out.println(opt1.orElse("opt")); // string 리턴
System.out.println(opt2.orElse("opt")); // opt 리턴
값이 null일수도 아닐수도있는 경우에는 Optional.ofNullable()로 객체를 생성할수있다.
이후에 .orElse()나 .orElseGet()메서드를 이용하여 안전하게 값을 가져올수있다.
Optional클래스 포함 메서드
참고 :
https://mangkyu.tistory.com/70
http://www.tcpschool.com/java/java_stream_optional