Java함수형과 현대 Java

Optional과 null 처리

`Optional`이 null 자체를 없애는 도구가 아니라, 값이 없을 수 있음을 더 명시적으로 표현하는 방법이라는 점을 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

java
Optional<User> user = findUser(id);

String name = user.map(User::getName)
        .orElse("anonymous");

설명

  • Optional은 "값이 없을 수도 있다"는 사실을 타입으로 드러내는 래퍼입니다. 그래서 null을 완전히 대체한다기보다, absence를 더 의식적으로 다루게 만드는 도구에 가깝습니다.
  • 값을 꺼낼 때는 map, flatMap, orElse, orElseGet, ifPresent 같은 메서드 조합을 통해 null 체크 분기를 더 명시적으로 표현할 수 있습니다.
  • 중요한 점은 Optional이 무조건 좋은 것은 아니라는 것입니다. 필드, 직렬화 모델, 모든 getter에 기계적으로 붙이면 오히려 코드가 무거워질 수 있습니다.
  • 보통 메서드 반환값에서 "없을 수 있음"을 표현할 때 가장 자연스럽고, 내부 로컬 변수나 도메인 필드에는 꼭 맞지 않을 때도 많습니다.
  • 결국 Optional은 null을 숨기는 장치가 아니라, 없을 수 있는 값을 설계 단계에서 더 분명하게 드러내는 선택이라고 보는 편이 좋습니다.

빠른 정리

요소의미
Optional<T>값이 있을 수도 없을 수도 있음
map값이 있으면 변환
orElse없을 때 기본값 사용
잘 맞는 곳메서드 반환값
남용 주의필드/모든 getter에 기계적으로 사용하지 않기

주의할 점

Optional.get()만 쓰기 시작하면 결국 null 체크를 다른 형태로 옮긴 것에 불과해집니다. Optional은 "안전하게 꺼내는 흐름"까지 함께 써야 의미가 있습니다.

참고 링크

1 sources