Optional<Car> emptyOptional = Optional.empty();Optional<Car> hasDataOptional = Optional.of(new Car());Optional<Car> hasDataOptional = Optional.ofNullable(getCarFromDB());Optional<String> carName = getCarNameFromDB();
// orElse() 를 통해 값을 받아옵니다, 파라미터로는 null인 경우 반환할 값을 적습니다.
String realCarName = carName.orElse("NoCar");
// 위는 예시코드고 실제는 보통 아래와 같이 사용하겠죠?
String carName = getCarNameFromDB().orElse("NoCar");
// orElseGet()이라는 메서드를 사용해서 값을 받아올 수 있습니다.
// 파라미터로는 없는 경우 실행될 함수를 전달합니다.
Car car = getCarNameFromDB().orElseGet(Car::new);
// 값이 없으면, 그 아래 로직을 수행하는데 큰 장애가 되는경우 에러를 발생시킬수도 있습니다.
Car car = getCarNameFromDB()
.orElseThrow(() -> new CarNotFoundException("NO CAR!)정리해보면, Optional을 사용하는 이유는 Null Pointer Exception 을 방지하기 위함이고, null 인지 체크해야 할 필요가 있는 코드마다 if 조건절로 일일이 다 체크할 필요가 없어지기 때문입니다.
[참고]https://mangkyu.tistory.com/70
[참고]https://mangkyu.tistory.com/203