JAVA

Optional orElse(), orElseGet() 차이점

Ark B 2025. 4. 6. 17:28

Optional 클래스에서 or Else() 와 orElseGet()은 값이 없는 경우 대체값을 제공하기 위해 사용된다.

 

기본 개념 : Optional에서 대체값 제공

 

(1) Optional이란?

  • NullPointerException을 방지하기 위해 값을 포장하여 처리하는 객체입니다.
  • Optional을 사용하면 값이 존재할 때와 없을 때를 명시적으로 처리할 수 있다.

(2) orElse()와 orElseGet()의 차이

orElse 사용 예제

public class Main {
    public static void main(String[] args) {
        Optional<Integer> somethingOptional = Optional.ofNullable(null);

        Integer result = somethingOptional.orElse(performanceHeavy());
        System.out.println("Result: " + result);
    }

    public static Integer performanceHeavy() {
        System.out.println("Heavy computation executed");
        return 42;
    }
}

결과 :

null을 집어넣든 , Integer를 집어넣든 Heavy한 작업이 똑같이 실행된다.

 

orElseGet() 사용

public class Main {
    public static void main(String[] args) {
        Optional<Integer> somethingOptional = Optional.ofNullable(null);

        Integer result2 = somethingOptional.orElseGet(() -> performanceHeavy());
        System.out.println("Result: " + result2);
    }

    public static Integer performanceHeavy() {
        System.out.println("Heavy computation executed");
        return 42;
    }
}

 

orElseGet()의 동작 방식은

1. Supplier 함수로 대체값을 제공한다. 따라서 값이 없을 때만 실행된다.

지연 로딩 방식으로, 필요할 때만 함수를 호출하여 성능 저하를 방지한다.