JAVA(자바)
Optional<T>
지각생
2022. 2. 1. 18:03
728x90
Optional 이란?
- Optional이란, 값이 있을 수도 있고 없을 수도 있는 객체이다. 참조 타입의 객체를 한번 감싼 일종의 래퍼 클래스 이다.
- Optional은 원소를 최대 1개 가질 수 있는 불변 Collection이다.
- 자바 8 이전의 코드보다 null-safe한 로직을 처리 할 수 있게 해준다.
- Optional을 반환하여 좀 더 로직을 유연하게 작성할 수 있게 해준다.
Optional 메서드
- Optional.empty()
- 내부 값이 비어있는 Optional 객체 반환
- Optional.of(T value)
- 내부 값이 value인 Optional 객체 반환
- 만약 value가 null인 경우 NullPointerException 발생
- Optional.ofNullable(T value)
- 가장 자주 쓰이는 Optional 생성 방법
- value가 null이면, empty Optional을 반환하고, 값이 있으면 Optional.of로 생성
- T get()
- Optional 내의 값을 반환
- 만약 Optional 내부 값이 null인 경우 NoSuchElementException 발생
- boolean isPresent()
- Optional 내부 값이 null이면 false, 있으면 true
- Optional 내부에서만 사용해야하는 메서드라고 생각
- boolean isEmpty()
- Optional 내부의 값이 null이면 true, 있으면 false
- isPresent() 메서드의 반대되는 메서드
- void ifPresent(Consumer<? super T> consumer)
- Optional 내부의 값이 있는 경우 consumer 함수를 실행
- Optional<T> filter(Predicate<T> predicate)
- Optional에 filter 조건을 걸어 조건에 맞을 때만 Optional 내부 값이 있음
- 조건이 맞지 않으면 Optional.empty를 리턴
- Optional<U> map(Funtion<? super T, ? extends U> f)
- Optional 내부의 값을 Function을 통해 가공
- T orElse(T other)
- Optional 내부의 값이 있는 경우 그 값을 반환
- Optional 내부의 값이 null인 경우 other을 반환
- T orElseGet(Supplier<? extends T> supplier)
- Optional 내부의 값이 있는 경우 그 값을 반환
- Optional 내부의 값이 null인 경우 supplier을 실행한 값을 반환
- T orElseThrow()
- Optional 내부의 값이 있는 경우 그 값을 반환
- Optional 내부의 값이 null인 경우 NoSuchElementException 발생
- T orElseThrow(Supplier<? extends X> exceptionSupplier)
- Optional 내부의 값이 있는 경우 그 값을 반환
- Optional 내부의 값이 null인 경우 exceptionSupplier을 실행하여 Exception 발생
2. 올바른 Optional 사용법 가이드
[ 올바른 Optional 사용법 가이드 ]
- Optional 변수에 Null을 할당하지 말아라
- 값이 없을 때 Optional.orElseX()로 기본 값을 반환하라
- 단순히 값을 얻으려는 목적으로만 Optional을 사용하지 마라
- 생성자, 수정자, 메소드 파라미터 등으로 Optional을 넘기지 마라
- Collection의 경우 Optional을 사용하지 말고 빈 Collection으로 처리하라
- 반환 타입으로만 사용하라

출처: https://mangkyu.tistory.com/203 [MangKyu's Diary]
728x90