- Optional을 알기 전 NullPointerException을 알아야 한다.
- NullPointerException이란?
1. null 값이 반환되면 발생하는 예외이다.
- Optional이란?
1. JAVA8에서는 Optional<T> 클래스를 사용해 NPE를 방지할 수 있도록 도와준다.
2. Optional<T>는 null이 올 수 있는 값을 감싸는 Wrapper클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다.
public final class Optional<T> {
// If non-null, the value; if null, indicates no value is present
private final T value;
...
}
3. Optional 클래스는 위와 같이 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며, 클래스이기 떄문에 각종 메소드를 제공해준다.
- Optional 생성하기
1. Optional.empty() : 값이 Null인 경우
2. Optional.of() : 값이 Null이 아닌 경우
3. Optional.ofNullable() : 값이 Null일수도, 아닐수도 있는 경우
- Optional.empty() : 값이 Null인 경우
1. Optional은 Wrapper 클래스이기 때문에 값이 없을 수도 있는데, 이때는 Optional.empty()로 생성할 수 있다.
Optional<String> optional = Optional.empty();
System.out.println(optional); // Optional.empty
System.out.println(optional.isPresent()); // false
- Optional.of() : 값이 Null이 아닌 경우
1. 만약 어떤 데이터가 절대 null이 아니라면 Optional.of()로 생성할 수 있다. 만약 Optional.of()로 Null을 저장하려고 하면 NullPointerException이 발생한다.
// Optional의 value는 절대 null이 아니다.
Optional<String> optional = Optional.of("MyName");
- Optional.ofNullable() : 값이 Null일수도, 아닐수도 있는 경우
1. 만약 어떤 데이터가 null이 올 수도 있고 아닐 수도 있는 경우에는 Optional.ofNullbale로 생성할 수 있다. 그리고 이후에 orElse 또는 orElseGet 메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.
// Optional의 value는 값이 있을 수도 있고 null 일 수도 있다.
Optional<String> optional = Optional.ofNullable(getName());
String name = optional.orElse("anonymous"); // 값이 없다면 "anonymous" 를 리턴
'Programming > JAVA' 카테고리의 다른 글
JAVA - Stream API (1) (스트림 생성 방법) (0) | 2023.06.08 |
---|---|
JAVA - 열거형 (0) | 2023.06.07 |
JAVA - Reflection API (0) | 2023.06.01 |
JAVA - 람다 (기본) (0) | 2023.05.18 |
JAVA - 컬렉션 프레임 워크 (Collections Framework), List, Set, Map ... (1) 그 중 List (0) | 2023.05.18 |