Optional
Optional
최종 연산의 결과를 그냥 반환하지 않고 Optional객체에 담아 반환하여 반환된 결과가 null인지 체크하는 조건문 없이 null값으로 인해 발생하는 예외를 처리할 수 있다.
Optional 객체 생성
of()나 ofNullable()메서드를 사용하여 Optional객체를 생성할 수 있다.
참조 변수의 값이 null일 가능ㄴ성이 있으면, of()대신 ofNullable()을 사용하여 생성하는것이 좋습니다.
( of()메서드는 매개변수의 값이 null이면 NPE를 발생하기 때문)
Optional<String> val = Optional.of("abc");
Optional<String> val2 = Optional.of(null); //NullPointerException 발생
Optional<String> val3 = Optional.ofNullable(null); //ok
Optional 객체의 값 접근
get() 메서드를 사용하여 Optional객체에 저장된 값에 접근할 수 있다.
값이 null이면 NoSuchElementException이 발생하기 때문에 get()을 호출하기전에 isPresent()메서드를 사용하여 null인지 확인후에 호출하는것이 좋으며, 이를 대비하여 orElse()로 값을 대체할 수 있다.
Optional<String> opt = Optional.of("java");
System.out.println(opt.get()); //java
Optional<String> nullOpt = Optional.empty();
System.out.println(nullOpt.orElse("hello")); //hello
null 대신하는 값을 지정하는 메서드로 orElseGet(), orElseThrow()도 있다.
Optional<String> nullOpt = Optional.empty();
System.out.println(nullOpt.orElseGet(String::new));
System.out.println(nullOpt.orElseThrow(NullPointerException::new)); //null이면 예외 발생
기본 타입의 Optional 클래스
IntStream과 같은 기본 타입 스트림을 위한 Optional 클래스들이 있다. (OptionalInt, OptionalLong, OptionalDouble)
반환 타입이 Optional
클래스 | 값을 반환하는 메서드 |
---|---|
Optional |
T get() |
OptionalInt | int getAsInt() |
OptionalLong | long getAsLong() |
OptionalDouble | double getAsDouble() |
IntStream stream = IntStream.of(1, 2, 3, 4);
OptionalInt result = stream.findFirst();
System.out.println(result.getAsInt()); //1
'프로그래밍 > Java' 카테고리의 다른 글
클래스 (0) | 2020.12.18 |
---|---|
java8 - time (0) | 2020.03.10 |
java8 변경사항 - 스트림API 최종연산 (0) | 2020.02.07 |
Java8 변경사항 - 스트림API 중간연산 (0) | 2020.02.07 |
Java8 변경사항 - 스트림API 특징과 생성 (0) | 2020.02.01 |