본문 바로가기
won2dev-log
HomeArchiveTagsCategoriesAboutProjects
HomeArchiveTagsCategoriesAboutProjects
won2dev-logwon2dev-logwon2dev-log

비전공 개발자의 로그 | won2dev-log

Navigation
  • Home
  • Archive
  • About
  • Projects
Categories
  • Docs
  • TIL
  • Automation
  • Git · GitHub
  • Project
Tags
  • TIL
  • Java
  • Spring
  • Backend
  • n8n
더보기
About

기록을 거름 삼아 공유는 성장을 만든다.

LicensePrivacy
© won2dev 2026. All rights reserved.
Home›Docs›TIL - Java 기초: Optional과 Null 안전하게 다루기
Docs

TIL - Java 기초: Optional과 Null 안전하게 다루기

won2dev·2025년 03월 17일
#Java#TIL
TIL - Java 기초: Optional과 Null 안전하게 다루기

💬 배운 기술 / 지식

  • Null 문제의 심각성
  • Optional 클래스 개념과 등장 배경
  • Optional 생성과 주요 메서드 (of(), ofNullable(), empty())
  • Null 체크와 대체값 제공 (isPresent(), orElse(), orElseGet())
  • 함수형 스타일 Optional 활용 (map(), flatMap(), filter())
  • Optional 사용 시 주의사항과 한계

❗ Null 문제의 심각성

  • 자바에서 Null은 매우 흔하지만, NullPointerException(NPE) 발생의 주된 원인
  • NPE는 런타임 오류로, 프로그램 비정상 종료 및 유지보수 부담 증가
  • 전통적 Null 체크는 지저분한 if문과 중첩으로 코드 복잡도 상승
  • 안전하고 선언적인 Null 처리가 필요해짐

🎯 Optional 클래스란?

  • 자바 8부터 도입된 Null 포인터 대신 사용할 수 있는 래퍼 객체
  • 내부에 값이 있을 수도, 없을 수도 있는 컨테이너 역할
  • Null 상태를 명시적으로 표현하고, 안전한 API 설계 지원
  • 사용법 예시
java
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);

🛠 Optional 생성 방법

메서드설명주의사항
of(T value)Null이 아닌 값으로 Optional 생성값이 null이면 NullPointerException 발생
ofNullable(T value)Null일 수도 있는 값을 Optional로 생성Null 허용, Optional.empty() 반환 가능
empty()빈 Optional 생성값이 없음을 명시적으로 표현

🔍 Optional 주요 메서드 활용법

  • 값 확인
    java
    if (opt.isPresent()) { // 값이 있으면 true
        System.out.println(opt.get());
    }
    if (opt.isPresent()) { // 값이 있으면 true
        System.out.println(opt.get());
    }
  • 값 꺼내기와 기본값 제공
    java
    String value = opt.orElse("기본값");
    String value2 = opt.orElseGet(() -> "지연된 기본값");
    String value = opt.orElse("기본값");
    String value2 = opt.orElseGet(() -> "지연된 기본값");
  • 값 없을 때 예외 던지기
    java
    String value = opt.orElseThrow(() -> new IllegalStateException("값이 없어요"));
    String value = opt.orElseThrow(() -> new IllegalStateException("값이 없어요"));
  • 함수형 스타일 처리
    • map() : 값이 있으면 함수 적용 후 Optional 반환
    • flatMap() : 함수가 Optional 반환할 때 중첩 해소
    • filter() : 조건 만족하면 유지, 아니면 빈 Optional
java
opt.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 안전하게 설계하는 팁

  • 가능한 한 null 대신 Optional 반환
  • 파라미터로 Optional을 직접 받는 것보다는,

    null 허용 시 Optional 생성하여 내부에서 처리 권장

  • Optional은 컬렉션, 필드에는 사용하지 않는 게 일반적 (과용 주의)
  • Optional 자체도 객체라 불필요한 오버헤드 있을 수 있음

⚠️ Optional 사용 시 주의점

  • Optional은 직렬화(Serializable)에 주의 필요
  • 성능이 민감한 곳에서는 무분별한 Optional 사용 피할 것
  • Optional을 매개변수 타입으로 쓰는 건 권장되지 않음
  • 항상 명확하게 “값이 없을 수도 있음”을 표현하고자 할 때 사용

💡 느낀 점 / 참고 사항

  • Optional 덕분에 Null 관련 버그를 크게 줄일 수 있었음
  • 함수형 프로그래밍 패러다임과 잘 어울려서 코드가 더 깔끔해짐
  • 기존 코드에 Optional 적용 시점과 범위를 잘 선정해야 함
  • Null 안전 설계는 협업과 유지보수 효율성에 큰 영향
공유하기
이전 글TIL - Java 기초: 컬렉션(Collection) 프레임워크 이해하기다음 글 TIL - Java 기초: 예외와 예외처리의 모든 것

목차

  • 💬 배운 기술 / 지식
  • ❗ Null 문제의 심각성
  • 🎯 Optional 클래스란?
  • 🛠 Optional 생성 방법
  • 🔍 Optional 주요 메서드 활용법
  • 🔐 Null 안전하게 설계하는 팁
  • ⚠️ Optional 사용 시 주의점
  • 💡 느낀 점 / 참고 사항

카테고리

Docs

태그

#Java#TIL

최근 글

Git 요약 (1) - Rebase, Stash, Squash MergeTIL - MSA 핵심 요소 정리TIL - (4) Spring 어노테이션 정리: Mockito를 활용한 단위 테스트TIL - (3) Spring 어노테이션 정리: Lombok Getter, Setter와 생성자TIL - (2) Spring MVC와 WebFlux의 차이: 블로킹과 논블로킹