ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Optional 클래스
    Java 2023. 9. 8. 20:30

    java.util.Optional<T> 클래스

    Optional<T> 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)입니다.

    public final class Optional<T> {
        /**
         * If non-null, the value; if null, indicates no value is present
         */
        private final T value;
    }

    이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있습니다.

    즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 됩니다.

     


     

    Optional 객체의 생성

    of() 메소드나 ofNullable() 메소드를 사용하여 Optional 객체를 생성할 수 있습니다.

     

    of()

    • null이 아닌 명시된 값을 가지는 Optional 객체를 반환합니다.
    • 만약 of() 메소드를 통해 생성된 Optional 객체에 null이 저장되면 NullPointerException 예외가 발생합니다.

     

    ofNullable()

    • 명시된 값이 null이 아니면 명시된 값을 가지는 Optional 객체를 반환하며, 명시된 값이 null이면 비어있는 Optional 객체를 반환합니다.
    Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
    System.out.println(opt.get()); // 자바 Optional 객체

     


     

    Optional 객체에 접근

    get() 메소드를 사용하면 Optional 객체에 저장된 값에 접근할 수 있습니다.

    만약 Optional 객체에 저장된 값이 null이면, NoSuchElementException 예외가 발생합니다.

    따라서 get() 메소드를 호출하기 전에 isPresent() 메소드를 사용하여 Optional 객체에 저장된 값이 null인지 아닌지를 먼저 확인한 후 호출하는 것이 좋습니다.

    Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
    
    if(opt.isPresent()) {
        System.out.println(opt.get()); // 자바 Optional 객체
    }

     

    또한, 다음과 같은 메소드를 사용하여 null 대신에 대체할 값을 지정할 수도 있습니다.

     

    1. orElse() 메소드 : 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 값을 반환함.

    2. orElseGet() 메소드 : 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 람다 표현식의 결괏값을 반환함.

    3. orElseThrow() 메소드 : 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 예외를 발생시킴.

    Optional<String> opt = Optional.empty();	// Optional를 null로 초기화함.
    System.out.println(opt.orElse("빈 Optional 객체")); // 빈 Optional 객체
    System.out.println(opt.orElseGet(String::new)); //
    
    Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
    System.out.println(opt.orElse("빈 Optional 객체")); // 자바 Optional 객체
    System.out.println(opt.orElseGet(String::new)); // 자바 Optional 객체

     


     

    Optional 메소드

    메소드 설명
    static <T> Optional<T> empty() 아무런 값도 가지지 않는 비어있는 Optional 객체를 반환함.
    T get() Optional 객체에 저장된 값을 반환함.
    boolean isPresent() 저장된 값이 존재하면 true를 반환하고, 값이 존재하지 않으면 false를 반환함.
    static <T> Optional<T> of(T value) null이 아닌 명시된 값을 가지는 Optional 객체를 반환함.
    static <T> Optional<T> ofNullable(T value) 명시된 값이 null이 아니면 명시된 값을 가지는 Optional 객체를 반환하며, 명시된 값이 null이면 비어있는 Optional 객체를 반환함.
    T orElse(T other) 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 값을 반환함.
    T orElseGet(Supplier<? extends T> other) 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 람다 표현식의 결괏값을 반환함.
    <X extends Throwable> T
    orElseThrow(Supplier<? extends X>  exceptionSupplier)
    저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 예외를 발생시킴.

     

     

    출처 : http://tcpschool.com/java/java_stream_optional

     

    코딩교육 티씨피스쿨

    4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

    tcpschool.com

    'Java' 카테고리의 다른 글

    String, StringBuffer, StringBuilder  (0) 2023.08.31
    정규식 사용법  (0) 2023.08.18
    Iterator, Enumeration 인터페이스  (0) 2023.06.30
    Set  (0) 2023.06.27
    List  (0) 2023.06.27
Designed by Tistory.