
orElse
User user = userRepository.findByUsername(username).orElse(
userRepository.save(User.builder()
.username(username)
.password(password)
.email(email)
.provider(provider)
.providerId(providerId)
.role(role)
.build())
);
return user;
Optional의 값 유무와 상관 없이 실행된다.
Optional이 null이 아니라면 가져온 값 반환, null이라면 orElse로 실행된 값 반환.
즉, 위 코드에서 user 값이 있더라도 새로운 User 객체가 생성되어 저장된다.
orElseGet
User user = userRepository.findByUsername(username).orElseGet(() ->
userRepository.save(User.builder()
.username(username)
.password(password)
.email(email)
.provider(provider)
.providerId(providerId)
.role(role)
.build())
);
return user;
Optional에 값이 없을 때만 실행된다.
위 코드에서 user 값이 있다면 orElseGet() 안에 있는 로직은 실행되지 않는다.
결론
orElse(null)과 같은 상황이 아닌, 객체를 저장하는 등의 CRUD 관련 로직의 경우 상황에 맞게 orElseGet으로 실행하는 것을 권장한다.
'스프링' 카테고리의 다른 글
mustache 템플릿 설정 (0) | 2022.11.18 |
---|---|
[자바] Lombok - 부모클래스의 toString 호출하기 (0) | 2022.11.17 |
[스프링] Querydsl - 동적쿼리 구현 방법 (0) | 2022.10.19 |
[스프링] @RestControllerAdvice 이용한 예외처리 방법 (0) | 2022.10.14 |
[스프링] 톰캣(Tomcat) 서버 시작 속도 개선 (2) | 2022.10.06 |