728x90
Java Optional
@2024.04.25
Java Optional
💡
JAVA8부터 Optional<T> 클래스를 이용해 NullPointerException(NRE)를 방지할 수 있도록 하기 위해 등장한 것으로, Integer나 Double 클래스처럼 null이 올 수 있는 값을 감싸는 포장해 주는 Wrapper 클래스
- 명시적으로 값이 없음을 나타내는데 사용되며, null을 피하는 데 도움이 된다.
- null 값을 참조하더라도 NullPointerException(NRE)가 발생하지 않도록 도와준다.
→ Optional 클래스는 value 값을 저장하기 때문
- null 값을 참조하더라도 NullPointerException(NRE)가 발생하지 않도록 도와준다.
- 주로 메서드의 반환 유형으로 사용되며, 이를 통해 메소드가 값을 반환하지 못할 경우에 대한
처리를 명시적으로 할 수 있다.
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();
- Optional 객체가 값을 포함하는 경우에 해당 값을 반환하며,
- isPresent()
- Optional 객체가 값을 포함하고 있는지 반환
if (optional.isPresent()) { // 값이 존재하는 경우 처리 }
- ifPresent(Consumer<? super T> consumer)
- Optional 객체가 값이 존재하는 경우에만 주어진 동작을 수행
optional.ifPresent(value -> System.out.println("Value: " + value));
728x90