[Java] Optional

Jeon817·2023년 4월 17일

Java

목록 보기
3/4

[Optional 이란?]

  • Optional<T>은 제네릭 클래스로 T 타입의 객체를 감싸는 래퍼 클래스 입니다(null이 올 수 있는 값을 감싸는 래퍼 클래스). 그래서 Optional 타입의 객체에는 모든 타입의 참조변수를 담을 수 있습니다.
    -> 이처럼 객체에 담아서 반환을 하면, 반환된 결과가 null인지 매번 if문으로 체크하는 대신 Optional에 정의된 메서드를 통해서 간단히 처리 할 수 있습니다.
  • Java8에서는 Optional<T> 클래스를 사용해 Null Pointer Exception을 방지할 수 있도록 도와줍니다.
  • 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());
  • Optional 객체 사용하기 (값 받아오기)
    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

0개의 댓글