optional은 <T>타입의 객체를 감싸는 래퍼 클래스 이다. 그래서 Optional타입의 객체에는 모든 타입을 담을 수 있다.
get( ) : 비어있는 Optional 객체에 NoSuchElementException을 던진다.
orElse(T other) : 비어있는 객체에 넘어온 인자를 반환한다
orElseGet( Suppler<? extends T> other) : 비어있는 객체에, 넘어온 함수형 인자를 통해 생성된 객체를 반환한다.
orElseThrow(Supplier<? extends X> exceptionSuppler) : 비어있는 객체에, 넘어온 함수형 인자를 통해 생성된 예외를 던진다.
Optional 객체에 저장된 값을 가져올땐 get( )을 사용한다.
값이 null 인 상황을 대비해서, orElse( )로 대체할 값을 지정할 수 있다. orElse()의 매개변수 자리에 null일때 대체할 값을 적어준다.