Spring Data JPA 사용시 Repository패턴에서 Optional에서 isPresent와 get을 쓰는것이 별로 좋지 않다고 하여 리팩토링 해보았다.
Optional에서 .get() .isPresent()
를 쓰면 좋지 않은 이유
.get()
은 Null을 반환할 수 있으므로처음코드로는
Optional <Restock> restock = restockRepository.findById(restockId);
if(restock.isPresent()){
restock.get().setDeleted(true);
restockRepository.save(restock.get());
이런 형태였다.
.get()
의 경우 결과값이 null일 경우 NoSuchElementException 발생
orElseThrow()
를 통해 값이 없을 경우 예외를 던져주거나
orElse , orElseGet
를 통해 값이 없을 경우 값을 지정해야 한다
리팩토링한 코드로는
Optional<Restock> restock = Optional.ofNullable(
restockRepository
.findById(restockId)
.orElseThrow(() -> new NoSuchElementException("error")));
restock.ifPresent(r -> {
r.setDeleted(true);
restockRepository.save(r);
}
);
orElseThrow()
로 Exception을 던져주었으며
isPresent()
대신 ifPresent()
를 사용하여 Repository 패턴을 통해 DB에 save 하였다.