개발/Java & Kotlin

[Java] OrElse, OrElseGet 차이

devhooney 2024. 4. 15. 16:42
728x90

 

 

 

Optional 의 orElse, orElseGet 차이점에 대해서 알아보자

 

 

 

728x90

 

 

 

 

Optional은 자바 8부터 도입된 클래스로, 값이 있을 수도 있고 없을 수도 있는 상황을 처리하는 데 사용된다.

Optional은 값이 있는지 없는지를 명시적으로 표현함으로써 NullPointerException을 방지하고, 코드의 가독성을 높여준다.

 

orElseGet와 orElse는 Optional 객체에서 값을 가져오는 메서드 중 두 가지이다.

 

 

1. orElseGet

값이 존재하지 않을 경우에만 실행되는 함수를 인수로 받는다. 값이 존재하지 않을 때마다 이 함수가 호출되며, 이 함수의 반환값이 Optional의 값이 된다. 이 함수는 Supplier를 매개변수로 받아야 하므로 지연 로딩(lazy loading)에 적합하다. 즉, 값이 필요한 시점에만 계산된다.

Optional<String> optional = Optional.empty();
String result = optional.orElseGet(() -> "Value is absent");

 

 

 

2. orElse

값이 존재하지 않을 경우에 반환할 기본값을 인수로 받는다. 값이 존재하지 않을 때는 이 기본값이 반환된다. 이 메서드는 값을 가져오는 시점에 상관 없이 기본값을 바로 반환한다.

Optional<String> optional = Optional.empty();
String result = optional.orElse("Value is absent");

 

 

따라서,

orElseGet은 값이 필요한 시점에 함수를 실행하고,

orElse는 값이 존재하지 않을 때 기본값을 반환하는 것으로 요약할 수 있다.

 

 

 

728x90