- Integer나 Double 클래스처럼 객체를 포장해주는 Wrapper 클래스
- 모든 타입의 참조변수를 저장할 수 있다
- Optional 객체 사용시 NullPointerException 메서드로 간단한 회피 가능
- 복잡한 조건문 없이 null값으로 발생하는 예외 처리 가능
1. optional 객체의 생성
- of()메서드나 ofNullable()메서드를 이용해 객체 생성 가능
- of()메서드
- null이 아닌, 명시된 값을 가지는 Optional 객체 반환
- 해당 객체에 null이 저장되면 NullPointerException 예외 발생
- null 가능성 있을 시 ofNullable()메서드 사용
- ofNullable() 메서드
Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
System.out.println(opt.get());
/*실행 결과
자바 Optional 객체*/
2. optional 객체의 접근
- get()메서드를 통해 객체에 저장된 값에 접근
- 저장된 값이 null일 시 NoSuchElementException 예외 발생
- get메서드 호출 전 isPresent()메서드를 사용해 null인지 판별
Optional<String> opt = Optional.ofNullable("자바 Optional 객체");
if(opt.isPresent()) {
System.out.println(opt.get());
}
/*실행 결과
자바 Optional 객체*/
- orElse()
- 저장된 값이 존재혀만 그 값을 반환
- 값이 존재하지 않으면 인수로 전달된 값을 반환
- orElseGet()
- 저장된 값이 존재혀만 그 값을 반환
- 값이 존재하지 않으면 인수로 전달된 람다식의 결과값을 반환
- orElseThrow()
- 저장된 값이 존재혀만 그 값을 반환
- 값이 존재하지 않으면 인수로 전달된 예외 발생
Optional<String> opt = Optional.empty(); //Optional를 null로 초기화함.
System.out.println(opt.orElse("빈 Optional 객체"));
System.out.println(opt.orElseGet(()->new String("java")));
/*
실행 결과
빈 Optional 객체
java
*/
3. 기본 타입의 Optional 클래스
- 기본타입 스트림을 위한 별도의 Optional 클래스 제공
- OptionalInt 클래스
- OptionalLong 클래스
- OptionalDouble 클래스
- 반환타입은 Optional이 아닌 해당 기본타입
IntStream stream = IntStream.of(4,2,1,3);
OptionalInt result = stream.findFirst();
System.out.println(result.getAsInt());
/* 결과
4*/