<T>
클래스Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)이다.
따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있다!
이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다.
Optional<String> opt = Optional.ofNullable("Optional"); //객체 생성
System.out.println(opt.get()); //Optional
ofNullable() 메소드는 명시된 값이 null이 아니면 명시된 값을 가지는 Optional 객체를 반환
명시된 값이 null이면 비어있는 Optional 객체를 반환, 만약 Optional 객체에 저장된 값이 null이면, NoSuchElementException 예외가 발생
Optional<String> opt = Optional.ofNullable("Optional"); //객체 생성
if(opt.isPresent()) {
System.out.println(opt.get()); //Optional
}
get() 메소드를 호출하기 전에 isPresent() 메소드를 사용하여 Optional 객체에 저장된 값이 null인지 아닌지를 먼저 확인한 후 호출하는 것이 좋다.
이 방법 외에 orElse(), orElseGet()을 사용해 null대신 대체할 값을 지정할 수 있다.
Optional<String> opt = Optional.empty(); // Optional를 null로 초기화함.
System.out.println(opt.orElse("emplty")); // empty
System.out.println(opt.orElseGet(String::new));