프로젝트를 진행하면서 Optional 객체의 유무를 판단하고 예외를 처리하기 위해 if문을 사용해왔습니다.
if문을 사용하면서 예외 처리 또는 값을 반환하다보니 코드의 가독성이 떨어졌습니다.
orElseThrow를 통해 Optional에서 원하는 객체를 바로 얻거나 예외를 던질 수 있습니다.
public class ItemService {
/** if문으로 처리하다보니 코드가 길어지고 반복된 작업을 해야한다는 불편함이 존재 **/
// 예외 대신 null을 반환
Item findItemById_if(Long itemId) {
Optional<Item> item = itemRepository.findById(itemId);
if(item.isPresent()) {
...
return item.get();
}
return null;
}
// 예외 던짐
Item findItemById_if2(Long itemId) {
Optional<Item> item = itemRepository.findById(itemId);
if(item.isEmpty()) {
throw new NoSuchElementException();
}
return item.get();
}
// orElseThrow를 사용하여 코드 가독성 향상!!
// 해당 item이 없다면 예외, 있다면 return -> 가독성 향상
Item findItemById_orElseThrow(Long itemId) {
return itemRepository.findById(itemId)
.orElseThrow(() -> new NoSuchElementException());
}
}
Ref
현재 프로젝트의 일부로 if 문을 사용하여 Optional 객체가 있는지 확인하고 예외를 처리하고 있습니다.
https://velog.io/@chiyongs/orElseThrow Monkey Mart