공부/Spring

옵셔널(optional)과 람다(lambda)를 이용하여 JpaRepository에서 예외 처리하기

2020. 11. 17. 23:35

spring에서 JpaRepository의 findById를 이용하면 Optional<T> 타입으로 반환이 된다.

처음에는 불편하기만 하였으나 이제 많이 편해져서 혹시라도 아직 불편하게 사용하는 사람들을 위해서 그 방법을 공유한다.

아래 4가지의 코드는 같은 로직을 가독성이 좋게 코드를 조금씩 수정한 것이다.

가나다

많이 이상하고 불편했던 경우

Optional<User> optinalUser = userRepository.findById(id);
// check for null
if(optinalUser.isPresent()) {
    User user = optinalUser.get();
} else {
    throw new ResourceNotFoundException();
}

옵셔널 타입이 아닌 일반 객체로 받았을 경우

User user = userRepository.findByUsername(username);    // 반환값이 User 타입인 메서드
// check for null
if(user == null) {
    throw new ResourceNotFoundException();
} else {
    User user = optinalUser.get();
}

null 값 체크를 하면서 옵셔널을 사용하여 가독성 좋이 좋아보이는(?) 코드를 만들어 보았다.

User user = userRepository.findById(id)
                          .orElseThrow(() -> new ResourceNotFoundException());

람다식의 생성자 참조를 사용하여 조금 더 간단하게 만들었다.

User user = userRepository.findById(userPrincipal.getId())
                          .orElseThrow(ResourceNotFoundException::new);

 

 

자바 옵셔널과 람다식 메서드/생성자 참조에 관한 글

자바 옵셔널 : jdm.kr/blog/234

메서드/생성자 참조 : tourspace.tistory.com/7

반응형