본문 바로가기
IT/Java

Optional 이란?

by 성준하이 2022. 8. 23.
반응형

지난 포스팅에서 dto 변수의 null 에 대한 포스팅을 다뤄본적이 있다.

관련 내용은 아래 참고 포스팅에 존재한다.

 

하지만 변수가 null이 아니라 dto 자체가 예를들어 쿼리의 결과가 없어서 dto 자체가 null이 될 경우가 있다.

 

물론 이럴경우는 전처리에서 

if (dto ==null){

으로 하면서 return 을 시켜주거나 혹은 초기값 설정등으로 처리할수 있지만 null을 미리 체크를 해볼수가 있다.

그때 사용하는것이 Optional이다.

 

Rest를 사용할 경우에를 예로 들어보면

repository 에서 받을때 

ExampleDto findById(String id);

이렇게 findById 에 대한 변수 결과를 받는것이 아니라.

Optional<ExampleDto> findById(String id);

이런 식으로 결과를 받으면 된다.

 

Optional을 사용하게 되면 null일 경우를 지정할수 있다.

그러면서 NullPointException 을 방지할수 있다.

 

 Optional은 Wrapper 클래스이기 때문에 빈 값이 올 수도 있으며, 빈 객체는 empty() 메서드로 생성할 수 있다. 

만약, NULL이 올 수 있는 데이터라면 해당 값을 Optional로 감싸서 생성할 수 있다.

또한, orElse 또는 orElseGet 메서드로 NULL인 경우라도 다른 값을 리턴할 수 있다.

Optional<String> optionalEmpty = Optional.empty();
System.out.println(optionalEmpty);
System.out.println(optionalEmpty.isPresent()); // false

Optional<String> opt = Optional.ofNullable(Object.getName());
String name = opt.orElse("isNull");

이런식으로 다른값으로 설정할수가 있다.

 

NPE(NullPointException) 을 방지할수 있는 부분에서는 매우 좋지만 만약 해당 값이 절대 null이 오지 않을경우엔 Optional을 사용하는것이 성능이 더 저하되므로 꼭 필요한 경우에만 사용을 하길 바란다.


참고 포스팅

https://thenicesj.tistory.com/253

 

null 관련 (Null, isEmpty(), null관련 annotation)

먼저 자바에서 null과 isEmpty 의 차이를 알아보면 null 인스턴스가 생성되지 않은 상태, list변수가 메모리에 아무런 주소값도 참조하지 않은 상태이다. list에 값이 없을 경우 null로 체크를 하면 안된

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

spring Batch  (40) 2022.08.25
스프링 웹플럭스(webflux)  (43) 2022.08.24
@Valid annotation (BindingResult, Error)(유효성 검사)  (48) 2022.08.22
querydsl 동적 쿼리 관련  (60) 2022.08.21
jackson annotation 관련  (41) 2022.08.20

댓글