Optional<T>란?
Optional<T>은 지네릭 클래스로 T 타입의 객체를 감싸는 래퍼 클래스이다. 그래서 Optional타입의 객체는 모든 타입의 참조변수를 담을 수 있다.
java.util.Optional은 JDK1.8부터 추가되었다.
스트림의 최종 연산 결과 타입이 Optional인 경우가 있다. 이때 Optional을 사용하면 최종 연산의 결과를 그냥 반환하는게 아니라 Optional 객체에 담아서 반환하다. 이렇게 객체에 담아서 반환을 하면, 반환된 결과가 null인지 매번 if문으로 체크하는 대신 Optional에 정의된 메서드를 통해서 처리할 수 있다. 즉, NullPointerException이 발생하지 않는 간결하고 안전한 코드를 작성하는 것을 가능하게 해준다.
기본형 Optional
- OptionalInt
- OptionalLong
- OptionalDouble
Optional 객체 생성하기
- of() : 매개변수로 넘어온 값이 null이면 NullPointerException 발생한다.
- ofNullable() : 매개변수로 넘어온 값이 null일 가능성이 존재한다.
- empty() : Optional<T>타입의 참조변수를 기본값으로 초기화할 때 사용한다, null을 이용하는 것보다 바람직하다.
Optional 객체의 값 가져오기
- get() : Optional 객체에 저장된 값을 가져올 때 사용한다, 값이 null일 때는 NoSuchElementException이 발생한다.
- orElse(): 객체에 저장된 값이 null일 경우 대체 값을 지정한다. NoSuchElementException이 발생하는 경우에 대해서도 해결 가능하다.
- orElseGet() : null을 대체할 값을 반환하는 람다식을 지정할 수 있다.
- orElseThrow() : null일 때 지정된 예외를 발생시킨다.
- isPresent() : Optional 객체의 값이 null이면 false를 아니면 true를 반환한다.
- ifPresent() : 인자 값이 있으면 주어진 람다식을 실행하고, 없으면 아무 일도 하지 않는다.
- findAny()나 findFirst()와 같은 최종 연산과 자주 사용된다.
기본형 Optional에 저장된 값을 꺼낼 때 사용하는 메서드
- get() : Optional<T>를 T로 반환한다.
- getAsInt() : OptionalInt를 int로 반환한다.
- getAsLong() : OptionalLong을 Long으로 반환한다.
- getAsDouble() : OptionalDouble을 Double로 반환한다.
자바의 정석(남궁성)을 정리한 내용입니다.
'Java' 카테고리의 다른 글
[Java] 스트림의 collect()와 세부 메서드 (0) | 2022.09.18 |
---|---|
[Java] 스트림(Stream) - 특징, 파이프라인, 메서드 총정리 (1) | 2022.09.16 |
[Java] 함수형 인터페이스(Functional Interface) - 매개변수, 형 변환, 변수 참조, function 패키지 (0) | 2022.09.15 |
[Java] 람다식(Lambda expression) - 생성 규칙 / 메서드 참조 (0) | 2022.09.15 |
[Java] Comparator와 Comparable (0) | 2022.09.14 |