홈 › 고급 › 05 / 10

Optional로 NPE 방지

섹션 7진행 0 / 10

7. 정리

  1. null 은 타입 시스템의 구멍이다. String s 는 사실 "String 또는 null" 이고 컴파일러는 이를 검사하지 않는다 — 그래서 NPE 가 가장 흔한 운영 장애다.
  2. Optional<T> 은 "값이 없을 수 있는 반환 타입" 을 시그니처에 명시하는 도구다. 필드·파라미터·컬렉션 요소에는 쓰지 않는다.
  3. orElse(x) 의 인자는 값이 있어도 항상 평가된다. 계산이 필요하면 orElseGet(() -> x). 없으면 예외는 orElseThrow(() -> ...).
  4. map / flatMap / filter / or / ifPresentOrElse 로 체이닝하면 null 검사 없이 중첩 구조를 안전하게 파고들 수 있다. isPresent + get 은 null 검사와 다를 게 없다.
  5. 생성 시점 Objects.requireNonNull 로 null 을 원천 차단하고, "없음"의 이유가 여러 개면 sealed + switch 패턴 매칭이 Optional 보다 정확하다.

이것으로 고급 과정(제네릭 → 멀티스레드 → 람다 → 스트림 → Optional)을 마쳤습니다. 다섯 주제는 서로 얽혀 있습니다: 제네릭이 Optional<T> 와 Stream<T> 의 타입 안전성을 만들고, 람다가 그 파이프라인의 연산을 표현하며, 스트림의 병렬 처리와 CompletableFuture 는 멀티스레드 원리 위에서 돕니다.

다음 단계로는 이 도구들을 실제 프로젝트(스프링 서비스 계층, 배치 처리)에 적용하며 익히는 것을 권합니다.