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
반응형
'공부 > Spring' 카테고리의 다른 글
Spring boot test 경로가 다른 패키지 테스트 시 오류 (6) | 2021.01.07 |
---|---|
Spring Data Rest 알아보기 (0) | 2020.11.20 |
Spring boot와 MySQL을 Docker 컨테이너로 올리기 (0) | 2020.08.22 |
스프링 프레임워크 어노테이션 기반 의존성 주입 (@Autowired, @Resource, @Inject) (0) | 2020.03.08 |
스프링 프레임워크 기본 디렉토리 구조 (Spring Framework directory structure) (0) | 2020.03.05 |