
of(), ofNullable(), empty())isPresent(), orElse(), orElseGet())map(), flatMap(), filter())NullPointerException(NPE) 발생의 주된 원인Optional<String> opt = Optional.of("Hello");
Optional<String> emptyOpt = Optional.empty();
Optional<String> nullableOpt = Optional.ofNullable(null);Optional<String> opt = Optional.of("Hello");
Optional<String> emptyOpt = Optional.empty();
Optional<String> nullableOpt = Optional.ofNullable(null);| 메서드 | 설명 | 주의사항 |
of(T value) | Null이 아닌 값으로 Optional 생성 | 값이 null이면 NullPointerException 발생 |
ofNullable(T value) | Null일 수도 있는 값을 Optional로 생성 | Null 허용, Optional.empty() 반환 가능 |
empty() | 빈 Optional 생성 | 값이 없음을 명시적으로 표현 |
if (opt.isPresent()) { // 값이 있으면 true
System.out.println(opt.get());
}if (opt.isPresent()) { // 값이 있으면 true
System.out.println(opt.get());
}String value = opt.orElse("기본값");
String value2 = opt.orElseGet(() -> "지연된 기본값");String value = opt.orElse("기본값");
String value2 = opt.orElseGet(() -> "지연된 기본값");String value = opt.orElseThrow(() -> new IllegalStateException("값이 없어요"));String value = opt.orElseThrow(() -> new IllegalStateException("값이 없어요"));map() : 값이 있으면 함수 적용 후 Optional 반환flatMap() : 함수가 Optional 반환할 때 중첩 해소filter() : 조건 만족하면 유지, 아니면 빈 Optionalopt.map(String::toUpperCase)
.filter(s -> s.startsWith("H"))
.ifPresent(System.out::println);opt.map(String::toUpperCase)
.filter(s -> s.startsWith("H"))
.ifPresent(System.out::println);null 허용 시 Optional 생성하여 내부에서 처리 권장