728x90
자바 8에서 추가된 Optional
public final class Optional<T> {
private final T value;
}
값을 직접 반환하지 않고 이렇게 한번 감싸서 반환하면, 매번 if문을 사용하여 null체크를 하지 않아도 Optional에 있는 메서드를 이용해서 NullPointerException이 발생하지 않는 보다 간결하고 안전한 코드를 작성할 수 있다.
Optional 객체 생성하기
- Optional.of(T value)
- Optional.ofNullable(T value)
- Optional.empty()
of 메서드는 매개변수의 값이 null이면 NullPionterException을 발생시키기 때문에, 값이 null일 가능성이 있으면 ofNullable메서드를 사용해야한다.
String str = "Hello world!";
Optional<String> optionalOf = Optional.of(str);
Optional<String> optionalOf = Optional.ofNullable(null);
Optional.empty() 메서드를 사용하면 비어있는 객체로 초기화 할 수 있다. 만약 값이 없다면 null로 초기화하는 것보다 empty 메서드를 사용하는 것이 좋다.
Optional<Integer> empty = Optional.empty();
Optional 객체 값 불러오기
- get() : optional 객체에 저장된 값을 반환한다.
Optional<String> optional = Optional.of("Hello World!");
String str = optional.get() // "Hello World!"
get메서드 사용시 값이 null이거나 비어있으면 NoSuchElementException이 발생한다.
- orElse(T other) : 값이 비어있거나 null이면 매개변수로 전달된 값을 반환한다.
- orElseGet(Supplier<? extends T> supplier) : 값이 비어있거나 null이면 람다식을 통해 반환된 값을 반환한다.
- orElseThrow(Supplier<? extends X> exceptionSupplier) : 값이 비어있거나 null이면 지정된 예외를 발생시킨다.
Optional<String> optional = Optional.empty();
//null이면 "Hello" 반환
optional.orElse("Hello");
//null이면 "Hello" 반환
optional.orElseGet(() -> new String("Hello"));
//null이면 NullPointerException 발생
optional.orElseThrow(NullPointerException::new);
- isPresent() : Optional 객체의 값이 비어있거나 null이면 false, 아니면 true 반환
- ifPresent(Consumer<? super T> action) : Optional 객체의 값이 null이거나 비어있는게 아니면 매개변수로 넘겨준 코드 실행
Optional<String> optional = Optional.ofNullable("Hello");
optional.isPresent(); //true
optional.ifPresent(System.out::println);
'자바' 카테고리의 다른 글
[Java] ThreadLocal (0) | 2021.12.30 |
---|---|
[자바8] Effectively final (0) | 2021.07.07 |
[자바] 문자열 뒤집기 - StringBuilder.reverse() (0) | 2021.07.05 |
[자바] 직렬화(Serialization) - Serializable, ObjectInputStream, ObjectOutputStream, Transient, serialVersionUID (0) | 2021.05.22 |
자바 char형을 int형으로 변환하는 방법 (0) | 2020.11.14 |
댓글