지난 포스팅에서 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
'IT > Java' 카테고리의 다른 글
Spring Batch (part 1. 소개) (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 |
댓글