[Java] Optional 객체 : null 관리

정재현·2024년 1월 18일

Java

목록 보기
42/43
post-thumbnail

Optional 등장 배경

변수를 참조할 때 데이터가 존재할 수도 있지만 데이터가 없어서 null을 참조하게 될 경우 nullPointerException 발생하는 경우가 존재
→ 즉, null 체크를 하지 않아 생기는 오류를 막기 위해 등장


해결방법

  • java.util.Optional 객체
    • null처리를 하기 위해 데이터를 감싸면서 했던 로직과, 그 외에도 처리를 편하게 해주는 로직이 존재


Optional 기본 정리

  • Java8에서는 Optional<T> 클래스를 사용해 Null Pointer Exception을 방지할 수 있도록 도와준다
  • Optional<T>null이 올 수 있는 값을 감싸는 Wrapper 클래스입니다.
  • Optional이 비어있더라도, 참조해도 Null Pointer Exception가 발생하지 않는다.

Optional 간단 사용법

  • 값이 null 인 Optional 생성하기
    Optional<Car> emptyOptional = Optional.empty();
  • 값이 있는 Optional 생성하기
    Optional<Car> hasDataOptional = Optional.of(new Car());
  • 값이 있을수도 없을수도 있는 Optional 생성하기
    Optional<Car> hasDataOptional = Optional.ofNullable(getCarFromDB());
    // getCarFromDB() : DB로부터 Car 객체를 가져오는 함수
  • 예시) Optional 객체 사용하기 (값 받아오기)
    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!)

참고사항

왜 Null을 보고 나쁘다고 하는 걸까?


profile
공부 기록 보관소

0개의 댓글