자바 프로그래밍에서 NullPointerException을 종종 보게 되는 이유
메서드에서 작업 중 값을 제대로 리턴할 수 없는 경우
예외를 던진다
스택 트레이스로 인한 비용 발생
✅ 스택트레이스는 프로그램이 시작된 시점부터 현재 위치까지의 메서드 호출 목록,
이는 예외가 어디서 발생했는지 알려주기 위해 JVM이 자동으로 생성
null을 리턴
(자바 8부터) Optional을 리턴
Optional.of(10);
OptionalInt.of(10); // 권장
Collection, Map, Stream Array, Optional은 Opiontal로 감싸지 말 것.
public static void main(String[] args) {
List<OnlineClass> springClasses = new ArrayList<>();
springClasses.add(new OnlineClass(1, "spring boot", true));
springClasses.add(new OnlineClass(2, "spring data jpa", true));
springClasses.add(new OnlineClass(3, "spring mvc", false));
springClasses.add(new OnlineClass(4, "spring core", false));
springClasses.add(new OnlineClass(5, "rest api development", false));
OnlineClass spring_boot = new OnlineClass(1, "optional boot", true);
Optional<Progress> progress = spring_boot.getProgress();
progress.ifPresent((p) -> System.out.println(p.getStudyDuration()));
Optional.of(10);
OptionalInt.of(10);
//Optional 활용
Optional<OnlineClass> optional = springClasses.stream()
.filter(oc -> oc.getTitle().startsWith("spring"))
.findFirst();
boolean present = optional.isPresent();
boolean empty = optional.isEmpty();
System.out.println(!present);
System.out.println(empty);
optional.ifPresent(oc -> System.out.println(oc.getTitle()));
System.out.println(onlineClass.getTitle());
Optional<OnlineClass> optional2 = springClasses.stream()
.filter(oc -> oc.getTitle().startsWith("jpa"))
.findFirst();
OnlineClass onlineClass2 = optional2.orElseThrow(IllegalStateException::new);
System.out.println(onlineClass2.getTitle());
Optional<OnlineClass> onlineClass1 = optional.filter(OnlineClass::isClosed);
System.out.println(onlineClass1.isEmpty());
System.out.println(onlineClass1.isPresent());
Optional<Integer> integer = optional.map(OnlineClass::getId);
System.out.println(integer.isPresent());
Optional<Optional<Progress>> progress1 = optional.map(OnlineClass::getProgress);
Optional<Progress> progress2 = progress1.orElseThrow();
Optional<Progress> progress4 = optional.flatMap(OnlineClass::getProgress);
}