[BE/Java] Optional 개념 및 샘플코드

    728x90
    반응형

    Optional

    1) JDK 8에서 도입된 클래스. 함수형 프로그래밍

    2) 값이 있을 수도 있고 없을 수도 있는(Nullable) 객체를 감싸고 있는 Wrapper 클래스

    3) NullPointerException을 방지 코드의 안정성과 가독성을 높일 수 있음

    4) 메소드의 리턴값이나 컬렉션 등에서 사용되며 값이 없을 수도 있는 상황에서 명시적으로 처리할 때 유용함

     

     

    Optional.of / Optional.ofNullable

    1) Optional.of(value): 주어진 값으로 Optional 객체를 생성. 주어진 값이 Null이라면 Exception 발생

    2) Optional.ofNullable(value): 주어진 값으로 Optional 객체를 생성. 주어진 값이 Null이라면 빈 Optional 객체를 반환

    3) Optional.empty(): 빈 Optional 객체. Optional 객체에는 Null을 할당할 수 없음

    import java.util.Optional;
    
    public class OptionalExample {
        public static void main(String[] args) {
            Double value = (Double)Math.random*10;
            value = value > 5 ? value : null;
    
            // Null이 할당되면 NullPointerException 발생
            Optional.of(value);
    
            // Null 할당가능
            Optional.ofNullable(value);
        }
    }

     

     

    isPresent / ifPresent

    1) Optional.isPresent(value): Optional 객체 안에 값의 존재 여부를 리턴

    2) Optional.ifPresent(Consumer<? super T> consumer): 값이 존재할 경우, 주어진 동작(일반적으로 메소드)를 실행

    import java.util.Optional;
    
    public class OptionalExample {
        public static void main(String[] args) {
            Double value = (Double)Math.random*10;
            value = value > 5 ? value : null;
    
            // 값이 존재하면 true / null이면 false 리턴
            System.out.println(Optional.ofNullable(value).isPresent());
    
            // 리턴타입이 void / 값이 존재하면 CONSOLE에 값 표시
            Optional.ofNullable(value).ifPresent(System.out::println);
        }
    }
    CONSOLE (값이 있으면)
    true
    5.1360...
    
    
    CONSOLE (값이 없으면)
    false

     

     

    orElse / orElseGet

    1) Optional.orElse(T other): 값이 존재하면 해당 값을 리턴하고 없으면 주어진 기본 값을 리턴

    2) Optional.orElseGet(Supplier<? extends T> supplier): 값이 존재하면 해당 값을 리턴하고 없으면 주어진 Supplier에서 생성된 기본값(호출한 API의 값)을 리턴

    import java.util.Optional;
    
    public class OptionalExample {
        public static void main(String[] args) {
            Double value = (Double)Math.random*10;
            value = value > 5 ? value : null;
    
            // 값이 존재하면 값을 리턴 / null이면 orElse에 입력한 값을 리턴
            System.out.println(Optional.ofNullable(value).orElse(0.0));
    
            // 값이 존재하면 값을 리턴 / null이면 orElse에서 호출한 API의 리턴값을 리턴
            System.out.println(Optional.ofNullable(value).orElseGet(()->get(value)));
        }
    
        public static Double get(Double value) {
            return Optional.ofNullable(value)
            .isPresent() ? Optional.of(value).get() : 0.0;
        }
    }
    CONSOLE (값이 있으면)
    5.1360...
    5.1360...
    
    
    CONSOLE (값이 없으면)
    0.0
    0.0
    728x90
    반응형

    댓글