JAVA Optional이란?

2024. 2. 27. 15:40· dev/자바

Optional 이란?

optional 이라는 단어는 우리 나라말로 "선택적인"이라는 의미이다. 

즉, 객체를 편리하게 처리하기 위해서 만든 클래스라고 보면된다. 

Optional 클래스는 java.util 패키지에 속해 있다. 

public final class Optional<T> extends object

 

object 클래스를 확장했고 final 클래스로 선언되어 있으며, generic 한 클래스다. 

final 변수는 변경불가능 하지만, final 클래스로 선언했다고 해서 내용 변경이 불가능한 것은 아니다. 

대신 추가적인 확장이 불가능하다. 즉 자식 클래스를 만들 수 없다는 의미다. 

이 곳에 물건을 넣을 수도 있고, 아무 물건이 없을 수 도 있다. 

그래서 기본적인 클래스를 만들기 위해서는 new Optional()과 같이 객체를 생성하지 않는다. 

 

Optional 객체생성 

리턴 메소드 empty(), of(), ofNullable()

private static void createOptionalObjects(){
        //empty()
        //데이터가 없는 Optional 객체를 생성하려면 이와 같이 empty() 메소드 사용
        Optional<String> emptyStr = Optional.empty();

        //ofNullable
        //만약 null이 추가될 수 있는 상황이라면 ofNullable() 메소드 사용
        String common = null;
        Optional<String> nullableStr = Optional.ofNullable(common);

        //of
        //반드시 데이터가 들어갈 수 있는 상황에서는 of()메서드 사용
        common = "common";
        Optional<String> commonStr = Optional.of(common);
    }

 

Optional 객체 확인

isPresent()

private static void checkOptionalData(){
        System.out.println(Optional.of("present").isPresent());
        System.out.println(Optional.ofNullable(null).isPresent());
    }

 

Optional 데이터 리턴 

get(), orElse(), orElseGet(), orElseThrow() 

private static void getOptionalData(Optional<String> data) throws Exception {
        String defaultVal = "default";
        //가장 많이 사용되는 get() 메소드. 만약 데이터가 없을 경우 null이 리턴된다.
        String result1 = data.get();

        //만약값이 없을 경우에는 orElse()메소드를 사용하여 기본값을 지정할 수 있다.
        String result2 = data.orElse(defaultVal);


        Supplier<String> stringSupplier = new Supplier<String>() {
            @Override
            public String get() {
                return "Java8 Optional";
            }
        };

        //Supplier<T>라는 인터페이스를 활용하는 방법으로 orElseGet() 메소드를 사용할 수 있다.
        //Supplier<T>는 람다표현식에서 사용하려는 요도로 만들어 졌으며, get()메소드가 선언되어있다.
        String result3 = data.orElseGet(stringSupplier);

        Supplier<Exception> exceptionSupplier = new Supplier<Exception>() {
            @Override
            public Exception get() {
                return new Exception();
            }
        };
        //만약 데이터가 없을 경우에 예외를 발생시키고 싶다면, orElseThrow() 메소드를 사용한다.
        String result4 = data.orElseThrow(exceptionSupplier);
    }

 

정리 

Optional 클래스는 null 처리를 보다 간편하게 하기 위해서 만들어졌다. 잘못하면 NullPointerException 이 발생할 수 있는데, 이문제를 보다 간편하고 명확하게 처리하려면 Optional을 사용하면 된다. 

'dev > 자바' 카테고리의 다른 글

스프링부트 - 스프링시큐리티 spring security  (0) 2024.03.03
Spring Boot Build 없이 Run. 톰캣 서버 재기동 없이 수정 반영 class resource jsp 등등  (0) 2022.11.08
eclipse maven프로젝트를 gradle로 변경  (0) 2022.10.13
Lombok  (0) 2022.09.27
[자바] Eclipse 에서 DCEVM 사용하기(서버재구동안하기.)  (0) 2021.02.19
'dev/자바' 카테고리의 다른 글
  • 스프링부트 - 스프링시큐리티 spring security
  • Spring Boot Build 없이 Run. 톰캣 서버 재기동 없이 수정 반영 class resource jsp 등등
  • eclipse maven프로젝트를 gradle로 변경
  • Lombok
아디봉
아디봉
내인생의 카드는 몇장일까?
아디봉
내이른
아디봉
전체
오늘
어제
  • 분류 전체보기 (81)
    • 경제적자유 (11)
      • 경제노트 (4)
      • 부동산노트 (3)
      • 책리뷰 (1)
      • 유튜브 (2)
    • dev (50)
      • 사이드프로젝트 (0)
      • JavaScript (7)
      • 스프링 (5)
      • 자바 (11)
      • docker (7)
      • tdd (0)
      • DB (2)
      • mongoDB (1)
      • python (1)
      • react (9)
      • 인증.권한 (1)
      • 기타 (5)
      • HTTP (0)
      • JSP (1)
    • life (9)
      • 백패킹 (3)
      • 자기개발 (6)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 자바
  • Oracle
  • docker
  • 파란코끼리들의기적
  • Cookie
  • javascript jsTree
  • Maven
  • 롬복
  • 쿠키
  • jstree
  • React
  • log4j
  • 정다르크
  • Lombok
  • Java
  • 스프링데이터jpa
  • 객체
  • javascript
  • react 이벤트
  • logback
  • 백패킹
  • Java8
  • function
  • web
  • optional
  • 자바스크립트
  • Object
  • 옵셔널
  • Eclipse
  • 파코기

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
아디봉
JAVA Optional이란?
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.