Skip to content
Woo Jin Jang edited this page Jun 7, 2025 · 8 revisions

📚 Optional이 왜 필요한지?

  • NPE(NullPointerException) 문제
    • 자바에서 null은 값이 없음을 표현하는 가장 기본적인 방법이다.
    • 하지만 null을 잘못 사용하거나 null 참조에 대한 메서드를 호출하면 NPE가 발생하여 프로그램이 예기치 않게 종료될 수 있다.
    • 특히 여러 메서드가 연쇄적으로 호출되어 null 체크가 누락되면 추적이 어렵고 디버깅 비용이 증가한다.
  • 가독성 저하
    • null 체크 로직이 누적되면 코드가 복잡해지고 가독성이 떨어진다.
  • 의도가 드러나지 않음
    • 메서드 시그니처만 보고 이 메서드가 null을 반환할 수도 있다는 사실을 명확히 파악하기 어렵다.
    • 호출하는 입장에서는 반드시 값이 존재할 것이라고 가정했다가 런타임에 null이 나와서 문제가 생길 수 있다.
  • Optional의 등장
    • 이러한 문제를 해결하고자 자바 8부터 Optional 클래스가 도입됐다.
    • Optional은 값이 있을수도 있고 없을수도 있음을 명시적으로 표현해주어 메서드의 계약이나 호출 의도를 좀 더 분명하게 드러낸다.
    • Optional을 사용하면 "빈 값"을 표현할 때 더 이상 null 자체를 넘겨주지 않고 Optional.empty()처럼 의도를 드러내는 객체를 사용할 수 있다.
    • null 체크 로직을 간결하게 만들고 특정 경우에 NPE가 발생할 수 있는 부분을 빌드 타임이나 IDE, 코드 리뷰에서 더 쉽게 파악할 수 있게 해준다.

📚 Optional 생성과 값 획득 방법

[Optional 값 생성]

  • Optional.of(T value)
  • Optional.ofNullable(T value)
  • Optional.empty()

[Optioanl 값 획득]

  • isPresent(), isEmpty()
  • get()
  • orElse(T other)
  • orElseGet(Supplier<? extends T> supplier)
  • orElseThrow()
  • or(Supplier<? extends Optional<? extends T>> supplier)
  • get()메서드는 Optional 사용 시 가능하면 피해야 한다. 왜냐하면 값이 없는 상태에서 get()을 호출하면 예외가 터지기 때문에 안전하게 사용하려면 isPresent()와 같은 사전 체크가 반드시 필요하다.
  • get()보다는 orElse(), orElseGet(), orElseThrow() 등의 메서드를 활용하면 좀 더 세련되고 안전하게 값을 처리할 수 있다.

📚 Optional 값 처리 방법

  • ifPresent()
  • ifPresnetOrElse()
  • map()
  • flatMap()
  • filter()
  • stream()

📚 즉시 평가와 지연 평가

📚 orElse() vs orElseGet()

📚 실무에서의 Optional Best Practice

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally