[ java ] Optional 이란?

2025. 1. 20. 17:06·JAVA

📘 Optional이란?

Null 값을 감싸는 Wrapper클래스이며, Null값을 참조 또는 사용하더라도 NullPointException(NPE)가 발생하지 않게 도와준다.
Java8에서 도입된 클래스이며, Optional<T> 클래스를 사용해 NullPointException(NPE)를 방지할수 있다.

📎 Optional 특징 ?

  • 값이 없을때 적절한 처리( Ex. 기본값 제공, 예외 발생 등)를 할 수 있게 도와준다.
  • Null값을 Wrapper로 한번 감싸서 사용하기 때문에 코드의 안정성을 높이는데 도움을 준다.

 

 

📘Optional의 객체 생성 방법 

1️⃣ Optional 생성 방법 : Optional.of(value)

  • 값이 null이 아님이 보장될 때 사용된다. 
  • 아래 코드는 hello라는 값을 가진 Optional 객체가 생성된다.
Optional<String> optional = Optional.of("Hello");
  • null을 전달하면 NullPointerException이 발생.
Optional<String> optionalNullTest= Optional.of(null);

 

 

2️⃣ 값이 없는 Optional 생성 방법 : Optional.empty()

  • 값이 없는 Optional 객체를 직접 생성할 수 있다.
  • Optional.of(null)은 NPE가 뜨지만, Optional.empty()는 값이 없는 객체를 만들었기 때문에 get() 사용시 NoSuchElementException 에러가 뜬다. 
    • 내부적으로 null을 담고 있는 것이 아니라, 단순히 비어 있는 상태(empty state = 객체는 존재하지만, 값이 없음)의 Optional 객체를 생성.
Optional<String> emptyOptional = Optional.empty();

 

 

 

📘 자주 사용되는 Optional 메서드 

1️⃣ isPresent() / isEmpty()

  • 값이 존재하는지 확인해주는 메서드이다.
Optional<String> optional = Optional.ofNullable("test");

if (optional.isPresent()) {
		System.out.println(optional.isPresent()); //true 출력 
    System.out.println(optional.get());  // "test" 출력
}

if (optional.isEmpty()) {
		System.out.println(optional.isEmpty()); //false 출력
    System.out.println("값이 없습니다. ");
}

 

 

 

2️⃣ get()

  • Optional 객체에서 값을 반환해주는 메서드이다.
Optional<String> optional = Optional.of("test");
System.out.println(optional.get());  // "test"

 

  • optional2는 NoSuchElementException 발생
  • optional2는 NullPointerException 발생

 

 

 

++ 천천히 추가 예정 

'JAVA' 카테고리의 다른 글

[ java ] Static 메서드에서 Field 접근  (0) 2025.03.31
[ java ] 인터페이스 (다중구현, static, default)  (0) 2025.03.31
[ java ] 멀티 스레드 사용법  (1) 2024.12.26
[ java ] 생성자, 생성자 오버로딩  (0) 2024.12.10
[ java ] 추상클래스  (0) 2024.12.10
'JAVA' 카테고리의 다른 글
  • [ java ] Static 메서드에서 Field 접근
  • [ java ] 인터페이스 (다중구현, static, default)
  • [ java ] 멀티 스레드 사용법
  • [ java ] 생성자, 생성자 오버로딩
Adose
Adose
  • Adose
    도즈의 개발 블로그
    Adose
  • 전체
    오늘
    어제
    • 분류 전체보기 (173)
      • JAVA (22)
      • 스프링 | 스프링 부트 (30)
        • 스프링 시큐리티 (1)
        • 채팅 (1)
      • 스프링 프로젝트 (5)
        • JDBC - 은행앱 구현 (1)
        • Spring Boot - 독서 블로그 프로젝트 (3)
        • 개인 프로젝트 - CoreBrief (1)
      • 가상화 기술 (1)
      • Git (1)
      • 코딩테스트 (96)
        • 프로그래머스 입문 (60)
      • AWS (1)
      • 데이터베이스 (0)
      • CS 공부 (3)
      • 알고리즘, 자료구조 (5)
      • 우테코 프리코스 (7)
      • 트러블 슈팅 (1)
      • 프론트 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    LV2
    Spring
    스프링
    test
    프로그래머스
    springdatajdbc
    jdbc
    코딩테스트
    LV1
    GIT
    LV0
    스프링부트
    멋쟁이사자처럼백엔드
    프론트
    멋쟁이사자처럼
    자바
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Adose
[ java ] Optional 이란?
상단으로

티스토리툴바