[스프링부트] 36. Optional

백하림's avatar
May 07, 2025
[스프링부트] 36. Optional

✅ Optional이 뭐야?

Optional<T>는 "값이 있을 수도, 없을 수도 있는 객체"예요.
즉, null을 그냥 쓰지 말고 Optional로 감싸서 안전하게 다루자는 거예요.

🛠️ Optional 만드는 법

Optional.of("값") // 절대 null 넣으면 안 됨 ❌ Optional.ofNullable(변수) // null일 수도 있을 때 Optional.empty() // 비어있는 Optional

🔓 Optional에서 값 꺼내는 법

opt.get() // ❌ 값 없으면 터짐 (지양) opt.orElse("기본값") // 값 없으면 기본값 리턴 opt.orElseGet(() -> ...) // 값 없으면 람다 실행 opt.orElseThrow() // 값 없으면 예외 던짐

🔍 값 있는지 확인하기

opt.isPresent() // 값 있으면 true opt.ifPresent(val -> ...) // 값 있으면 처리

⚠️ 주의할 점

Optional.of(null); // ❌ NullPointerException 터짐!
  • null 가능성 있으면 ofNullable() 쓰세요.
  • get() 직접 쓰는 건 피하고, orElse, ifPresent 같은 안전한 방식 쓰세요.

💡 한 줄 요약

Optional = "null 안전하게 쓰자"는 문법 도구!

테스트 코드

@Test public void t1() { String name = "metacoding"; Optional<String> opt = Optional.ofNullable(name); if (opt.isPresent()) { System.out.println(opt.get()); } else { System.out.println("선물 박스에 값이 없음."); } } @Test public void t2() { String name = null; Optional<String> opt = Optional.ofNullable(name); String result = opt.orElseThrow(() -> new RuntimeException("값이 없어요.")); System.out.println(result); } @Test public void t3() { String name = null; Optional<String> opt = Optional.ofNullable(name); String result = opt.orElseGet(() -> "metacoding"); System.out.println(result); }

t1 실행 결과

notion image

t2 실행 결과

notion image

t3 실행 결과

notion image
Share article

harimmon