본문 바로가기
JAVA

Java Optional

by 융디's 2024. 5. 3.
728x90
Java Optional

Java Optional

@2024.04.25

Java Optional

💡
JAVA8부터 Optional<T> 클래스를 이용해 NullPointerException(NRE)를 방지할 수 있도록 하기 위해 등장한 것으로, Integer나 Double 클래스처럼 null이 올 수 있는 값을 감싸는 포장해 주는 Wrapper 클래스
  • 명시적으로 값이 없음을 나타내는데 사용되며, null을 피하는 데 도움이 된다.
    • null 값을 참조하더라도 NullPointerException(NRE)가 발생하지 않도록 도와준다.

      → Optional 클래스는 value 값을 저장하기 때문

  • 주로 메서드의 반환 유형으로 사용되며, 이를 통해 메소드가 값을 반환하지 못할 경우에 대한
    처리를 명시적으로 할 수 있다.

Optional 생성하기

  • Optional.of(value)
    • 어떤 데이터가 절대 null 값이 아니라고 판단되면, 이 메서드를 사용해서 생성
    • 만약 null 값을 저장하려고 하면 NullPointerException이 발생
    // Optionaldml value 값은 절대 null이 아닐시 사용
    // My라는 값을 가지는 Option 객체 생성
    Optional<String> optional = Optional.of("My");
  • Optional.ofNullable(value)
    • 어떤 데이터가 null 값이 올 수도 있고, 아닐 수 있수도 있다면 이 메서드를 이용해 생성
    • 생성 이후 orElse() 또는 orElseGet() 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.
    // Optional의 value 값이 있을수도, 없을수도 
    Optional<String> optional = Optional.ofNullable(getName());
    //Optional을 사용하여 getName()의 반환값이 null인지 아닌지 확인하고,
    //Optional이 null이라면 good 문자열을 반환 
    String name = optional.orElse("good");
  • orElse(T other)
    • 지정된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 값을 반환
    • 값이 null이 든 아니든 호출된다.
    • 매개변수 값을 취한다.
    String value = optional.orElse("default");
  • orElseGet(Supplier<? extends T> other)
    • 지정된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 람다 표현식의 결괏값을 반환
    • 값이 null 일 때만 호출된다.
    • 매개변수로 Supplier를 취한다.
    String value = optional.orElseGet(() -> generateDefaultValue());
  • orElseThrow(Supplier<? extends T> exceptionSupplier)
    • 지정된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 예외 발생
    String value = optional.orElseThrow(() -> new IllegalArgumentException("Value not present"));
  • empty()
    • 빈 Optional 객체 반환
    Optional<String> emptyOptional = Optional.empty();
  • get()
    • Optional 객체가 값을 포함하는 경우에 해당 값을 반환하며,
      그렇지 않은 경우
      NoSuchElementException 예외 발생
    String value = optional.get();
  • isPresent()
    • Optional 객체가 값을 포함하고 있는지 반환
    if (optional.isPresent()) {
        // 값이 존재하는 경우 처리
    }
  • ifPresent(Consumer<? super T> consumer)
    • Optional 객체가 값이 존재하는 경우에만 주어진 동작을 수행
    optional.ifPresent(value -> System.out.println("Value: " + value));

728x90

'JAVA' 카테고리의 다른 글

Stream  (0) 2024.05.03
람다식  (0) 2024.05.03
익명 객체  (0) 2024.04.27
UDP 프로그래밍  (0) 2024.04.27
TCP 프로그래밍  (1) 2024.04.27