-
T타입의 객체 래퍼클래스 - Optional<T>
public final class Optional<T> { private final T value; // T타입의 참조변수 .... }
null을 직접 다루는 것은 위험하기 때문에 Optional을 이용해서 간접적으로 null을 다루는 것이다.
Optinal<T> 객체 생성하기
String str = "abc"; Optional<String> optVal = Optional.of(str); Optional<String> optVal = Optional.of("abc"); Optional<String> optVal = Optional.of(null); // NullPointerException 발생 Optional<String> optVal = Optional.ofNullable(null); // 가능
null이 될 수 있으면 null 대신 Optional<T> 객체를 사용하는게 좋다.
Optional<String> optVal = null; // 이렇게 하면 안됨
Optional<String> optVal = Optional.empty(); // 이렇게 하는걸 추천
Optional<T> 객체의 값 가져오기
Optional<String> optVal = Optional.of("abc"); String str1 = optVal.get(); // null이면 예외 발생하기 때문에 거의 안쓰임 String str2 = optVal.orElse(""); // optVal에 저장된 값이 null일 때는, ""를 반환 String str3 = optVal.orElseGet(String::new); // 람다식 사용 가능 () -> new String)_ String str4 = optVal.orElseThrow(NullPointerException::new); // null이면 에외 발생
위의 예제에서 str2, str3의 경우의 메서드가 자주 사용된다.
// ifPresent(Consumer) - null이 아닐때만 수행하고 null이면 아무것도 안함 Optional.ofNullable(str).isPresent(System.out::println);
'JAVA > 스트림' 카테고리의 다른 글
스트림의 그룹화와 분할 (0) 2023.08.09 collect()와 Collectors (0) 2023.08.09 스트림의 연산 - 최종 연산 (0) 2023.08.08 스트림의 연산 - 중간 연산 (0) 2023.08.08 스트림 만들기 (0) 2023.08.08