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

2023. 7. 26. 18:00
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
반응형

BELATED ARTICLES

more