본문 바로가기
관련_배경_지식

Java_Optional

by Lcoding 2023. 12. 28.
반응형

DB에서 특정 조건의 데이터를 가져오는 경우 Optional

 

DB에서 특정 조건의 데이터를 가져오는 경우 stream의 최종 연산으로 Optional을 반환하는 경우가 많다.

ex) findAny(), findFirst()등

 

그런경우에 Optional에는 of(),ofNullable(),empty()를 사용할 수 있는데,

 

1) of()의 경우 

Optional<String> optional1 = Optional.of("123");

Optional<String> optional2 = Optional.of(null);

 

optional1 의 경우 정상동작하지만, optional2의 경우 NullPointerexception이 발생한다.

실무에서 NullPointerexception은 굉장히 자주만나고 위험한 오류이므로, 아래와같이 ofNullable()로 변경해준다.

 

2) ofNullable()의 경우 

Optional<String> optional1 = Optional. ofNullable("123");

Optional<String> optional2 = Optional. ofNullable(null);

 

이렇게 실행 하였을때 optional1 에는 정상적으로 "123"이라는 값이 들어갈 것이고, 

optional2 에는 비어있는 empty객체로 초기화된다.

 

2번의 경우 동작하면 아래와 같이 값이 들어가게되며, NullPointerexception은 발생하지않게된다.

 

 

하지만 해당 값을 끄내서 사용하려는 경우에 값이 empty라면 또다시 에러가 발생할 수 있기에 끄내는 경우에도,

optional2.orElse("값이 비어있을 경우 대체할 값"); 으로 끄내준다. 

 

결과적으로 아래와 같이 실행 하였을 경우 동작 하는 예시이다.

Optional<String> optional1 = Optional. ofNullable("123");

Optional<String> optional2 = Optional. ofNullable(null);


System.out.println(optional1.orElse("비어있다"));
System.out.println(optional2.orElse("비어있다"));

 

 

 

 

여기까지 Java Optional 사용법에 대하여 알아보았습니다.

 

감사합니다.

반응형

loading