springboot

[SpringBoot] orElse와 orElseGet 차이점

inhooo00 2024. 8. 10. 15:22

끄적끄적 프로젝트를 하던 중 orElse와 orElseGet의 차이점 코드리뷰를 받아서 공부하게 되었다.

 

orElse와 orElseGet

두 메서드를 확인하기 위해서 Optional 클래스를 보면

 

이런 내용으로 정의되어 있다.

 

1. 둘 다 결과적으로는 value가 null일 때 other을 return하는 형태이다.

2. 차이를 보자면 orElse는 코드가 실행되면 먼저 값을 가져오고, orElseGet은 코드가 실행될 때는 진행하지 않다가 null을 만나 호출되면 값을 가져온다 (if문과 비슷)

3. 쉽게 정리하자면

메서드에서 넘어온 값이 null이면 수행되는 것은 둘이 동일.
orElse는 메서드에서 넘어온 값이 null이던 아니던 전달된 값을 가장 먼저 실행한 후, 넘어온 값이 null이라면 먼저 실행됐던 값을 반환한다. 만약 넘어온 값이 null이 아니라면 쓰지 않는 값을 계산하게 되는 것.
반대로 orElseGet은 null인 경우에만 전달된 값을 실행한다.
따라서 (가상의)코드는 유저가 회원가입이 되어있다면 else를 진행하지 않고, 회원가입 되어있지 않다면 else를 실행한다. orElse였다면 무작정 else을 호출하고 null을 검사했을 것이다.

 

 

 

 

추가적인 공부

 

메모리적인 이점이 아닌 행위로 접근한다는 관점으로는 생각해보지 않았기에 참신했다. 

행위를 넘김으로써 얻을 수 있는 이점이 무엇일까? 고민해보자.