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
반응형
'백엔드 > 자바' 카테고리의 다른 글
[백엔드/Java] HTTP통신 JSON 데이터 요청 및 응답 처리 개념 및 샘플코드 (0) | 2023.10.03 |
---|---|
[BE/Java] JSON To DTO 파싱 개념 및 샘플코드 (0) | 2023.08.19 |
[BE/Java] Stream.map().collect() 개념 및 샘플코드 (0) | 2023.07.22 |
[BE/Java] Stream.of()를 사용한 값체크 샘플코드 (0) | 2023.07.20 |
[BE/Java] 커맨드 명령어(리눅스/윈도우) 실행 개념 및 샘플소스 (0) | 2023.07.13 |
댓글