1. Optional<T>
T 타입 객체의 래퍼 클래스
null을 직접 다루는 건 NullPointerException 발생 소지가 있기 때문에 위험함.
또 null을 그대로 쓰면 null체크등 코드가 지저분해짐.
그래서 Optional<T>를 사용해서 null을 간접적으로 다룸.
2. null대신 빈 Optional<T> 객체를 사용하자
Optional<String> optVal = null; // 이렇게 쓰지 말자!!
Optional<String> optVal = Optional.<String>empty(); // 빈 객체로 초기화
Optional<String> optVal = Optional.empty(); // <> 생략 가능
3. Optional<T>.isPresent()
Optional객체의 값이 null이면 false, 아니면 true를 반환
// ifPresent(Consumer) - null이 아닐 때만 작업 수행, null이면 아무 일도 안함
Optional.ofNullable(str).ifPresent(System.out::println);
4. Optional 객체의 값 가져오기 - get(), orElse(), orElseGet(), orElseThrow()
Optional<String> optVal = Optional.of("abc");
String str1 = optVal.get(); // optVal에 저장된 값을 반환. null이면 예외발생
String str2 = optVal.orElse(""); // optVal에 저장된 값이 null일 때는 ""를 반환
String str3 = optVal.orElseGet(String::new); // 람다식 사용가능 () -> new String()
String str4 = optVal.orElseThrow(NullPointerException::new); // null이면 예외발생
5. 기본형 값을 감싸는 래퍼클래스 - OptionalInt, OptionalLong, OptionalDouble
Optional<T> 형태를 사용해도 되지만 미리 만들어진 기본형 래퍼클래스를 사용하면 성능이 높아진다.
반응형
'Knowledge Wiki > Java' 카테고리의 다른 글
JAVA Collector 인터페이스, Collectors 클래스 (0) | 2021.12.02 |
---|---|
JAVA 스트림 최종 연산 - reduce(), collect(), forEach() (0) | 2021.12.02 |
JAVA 스트림 중간 연산, map(), flatmap(), sorted() (0) | 2021.12.02 |
JAVA 람다식 iterate(), generate() (0) | 2021.12.02 |
JAVA 스트림 (0) | 2021.12.02 |