java.util.Optional<T> 클래스
Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)
Optional 객체 사용하면 NullPointException 발생하지 않도록 도와줌.
Optional 클래스는 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며 여려 관련 메소드를 제공
public final class Optional<T> {
// If non-null, the value; if null, indicates no value is present
private final T value;
...
}
// Optional의 value는 값이 있을 수도 있고 null 일 수도 있다.
Optional<String> optional = Optional.ofNullable(getName());
String name = optional.orElse("anonymous"); // 값이 없다면 "anonymous" 를 리턴
Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
System.out.println(opt.get()); // 자바 Optional 객체
// Java8 이전
List<String> names = getNames();
List<String> tempNames = list != null
? list
: new ArrayList<>();
// Java8 이후
List<String> nameList = Optional.ofNullable(getNames())
.orElseGet(() -> new ArrayList<>());
Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
if(opt.isPresent()) {
System.out.println(opt.get());
}
Optional을 사용하면 null 또는 값을 감싸서 NPE 부담을 줄일 수 있지만 값을 wrapping 하고 다시 풀고 null일 경우 대체 함수 호출하는 등 오버헤드 있으므로 반환 값이 null일 가능성 있을 때만 사용하자.
-> 결과가 null일 수 있으며 null에 의해 오류 발생할 가능성 높을 때 반환값으로 사용.