변수를 참조할 때 데이터가 존재할 수도 있지만 데이터가 없어서 null을 참조하게 될 경우 nullPointerException 발생하는 경우가 존재
→ 즉, null 체크를 하지 않아 생기는 오류를 막기 위해 등장
java.util.Optional 객체
Optional<T> 클래스를 사용해 Null Pointer Exception을 방지할 수 있도록 도와준다Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper 클래스입니다. Optional<Car> emptyOptional = Optional.empty();
Optional<Car> hasDataOptional = Optional.of(new Car());
Optional<Car> hasDataOptional = Optional.ofNullable(getCarFromDB());
// getCarFromDB() : DB로부터 Car 객체를 가져오는 함수
Optional<String> carName = getCarNameFromDB();
// ex. orElse() 를 통해 값을 받기, 파라미터로는 null인 경우 반환할 값을 작성
String realCarName = carName.orElse("NoCar");
// 위는 예시코드, 실제는 보통 아래와 같이 사용
String carName = getCarNameFromDB().orElse("NoCar");
// orElseGet()이라는 메서드를 사용해서 값을 받아올 수 있다.
// 찾는 데이터가 없을 경우 어떻게 할지 실행될 함수를 매개변수로 전달
Car car = getCarNameFromDB().orElseGet(Car::new);
// 값이 없을 때, 그 아래 로직을 수행하는데 큰 장애가 되는경우 orElseThrow로 예외를 발생
Car car = getCarNameFromDB()
.orElseThrow(() -> new CarNotFoundException("NO CAR!)