Optional이란?
- null이 될 수도 있는 객체를 감싸고 있는 일종의 래퍼 클래스
Optional 을 사용하는 이유
- 기존에 런타임 시 NPE(NullPointerException)이 발생하는 것을 방어하기 위해 null check 로직을 추가하게 되어 가독성 떨어짐
- 이러한 것을 개선하기 위해 JAVA8에 java.util.Optional<T>라는 새로운 클래스가 추가 됨
객체 생성
Optional.empty()
- null을 담고 있는 Optional 객체를 얻어옴
return Optional.empty();
Optional.of(value)
- null이 아닌 객체를 담고 있는 Optional 객체를 생성
- null이 넘어올 경우, NPE를 던지기 때문에 주의해서 사용
object = List.of()
return Optional.of(object);
Optional.ofNullable(value)
- null인지 아닌지 확신할 수 없는 객체를 담고 있는 Optional 객체 생성
- Optional.empty()와 Optional.of(value)를 합쳐놓은 메소드
- Optional.of(value)의 경우 null이 넘어오게 되면 NPE를 던지지만 이건 null이 넘어오면 비어있는 Optional 객체를 줌
- 해당 객체가 null인지 아닌지 자신없는 상황에서는 이 메소드를 사용
return Optional.ofNullable(null);
Optional이 담고 있는 객체 접근
dto.get()
- 비어있는 Optional 객체에 대해서, NoSuchElementException을 던짐
dto.orElse(T other)
- 옵셔널이 비어 있다면 파라미터로 입력한 value를 리턴하게 됨
dto.orElseGet(Supplier<? extends T> other)
- 비어있는 Optional 객체에 대해서, 넘어온 함수형 인자를 통해 생성된 객체를 반환
- orElse(T other) 메소드와 동일하게 리턴 하지만 비어있는 경우만 함수를 호출해서 성능상 이점 기대 가능
dto.orElseThrow(Supplier<? extends X> exceptionSupplier)
- 비어 있는 Optional객체에 대해, 넘어온 함수형 인자를 통해 생성된 예외를 던짐
참고 사이트
https://developsd.tistory.com/127
'Java' 카테고리의 다른 글
자바 저장 글 (0) | 2024.07.09 |
---|---|
HashMap이 저장되는 형태와 원리, heap, stack 메모리구조 (0) | 2024.06.10 |
에러메세지는 어떤걸 남겨야 할까? (0) | 2023.07.11 |
Java Date 날짜, 시간 패턴 바꾸기 (0) | 2022.08.12 |
VO, DTO, Entity (0) | 2022.08.03 |
댓글