Optional<T>
- Optional은 T 타입의 객체를 감싸는 래퍼 클래스로, 모든 타입의 참조 변수를 저장할 수 있다.
- 최종 연산의 결과를 그냥 반환하는게 아니라 Optional 객체에 담아서 반환하므로, 예상치 못한 NullPointerException 예외를 피할 수 있다.
객체 생성
- Optional 객체는 of() 메서드나 ofNullable() 메서드를 사용하여 생성할 수 있다.
- of() 메서드는 null이 아닌 명시된 값을 가지는 Optional 객체를 반환하며, 만약 null이 저장되면 예외가 발생한다.
- 따라서 만약 참조변수의 값이 null이 될 가능성이 있다면 ofNullable() 메서드를 사용해야 한다.
객체 접근
- get() 메서드를 사용하면 Optional 객체에 저장된 값에 접근할 수 있으며, 만약 저장된 값이 null이면 NoSuchElementException이 발생한다.
- 따라서 get() 메서드를 호출하기 전에 isPresent() 메서드를 사용하여 Optional 객체에 저장된 값이 null인지 확인해야 한다.
대체값 지정
- orElse() 메서드는 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 값을 반환한다.
- orElseGet() 메서드는 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 람다 표현식의 결과값을 반환한다.
- orElseThrow() 메서드는 저장된 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 인수로 전달된 예외를 발생시킨다.
Stream 클래스
- Stream 클래스에 정의된 메서드 중에서 Optional을 반환하는 메서드들은 다음과 같으며, ifPresent()는 findAny()나 findFirst()와 같은 최종 연산과 많이 쓰인다.
Optional<T> findAny()
Optional<T> findFirst()
Optional<T> max(Comparator<? super T> comparator)
Optional<T> min(Comparator<? super T> comparator)
Optional<T> reduce(BinaryOperator<T> accumulator)
'Java > Java' 카테고리의 다른 글
스트림 (Stream) (0) | 2022.03.28 |
---|---|
람다 표현식 (0) | 2022.03.28 |
Enum 클래스 (0) | 2022.03.28 |
Arrays, Collections (0) | 2022.03.28 |
Comparable과 Comparator (0) | 2022.03.28 |