Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 Optional.ifPresentOrElse() 메서드의 목적과 사용 방법

Java 9에서 Optional 클래스에 새롭게 추가된 ifPresentOrElse() 메서드는 ConsumerRunnable, 두 개의 매개변수를 받는다는 점이 가장 큰 개선 사항입니다.

ifPresentOrElse() 메서드의 목적

이 메서드의 핵심 목적은 다음과 같습니다. Optional 객체에 값이 존재하면, 해당 값에 대해 지정된 동작을 실행합니다. 즉, action.accept(value)가 호출되며, 이 부분은 기존의 ifPresent() 메서드와 동일하게 작동합니다.

그렇다면 ifPresent()와의 차이점은 무엇일까요? 바로 두 번째 매개변수인 emptyAction의 존재입니다. 만약 Optional에 값이 없다면, ifPresentOrElse() 메서드는 빈 동작인 emptyAction.run()을 호출합니다. 덕분에 값의 유무에 따라 분기 처리를 별도의 if문 없이 한 줄로 깔끔하게 작성할 수 있습니다.

메서드 시그니처(구문)

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
  • action: 값이 존재할 때 실행할 Consumer 람다 표현식
  • emptyAction: 값이 존재하지 않을 때 실행할 Runnable 람다 표현식

사용 예제

import java.util.Optional;

public class IfPresentOrElseMethodTest {
   public static void main(String args[]) {
      Optional<Integer> optional = Optional.of(1);

      optional.ifPresentOrElse(x -> System.out.println("Value: " + x), () ->
                                    System.out.println("Not Present"));

      optional = Optional.empty();

      optional.ifPresentOrElse(x -> System.out.println("Value: " + x), () ->
                                    System.out.println("Not Present"));
   }
}

실행 결과

Value: 1
Not Present

위 예제에서 첫 번째 호출은 Optional.of(1)로 값이 존재하므로 "Value: 1"이 출력되고, 두 번째 호출은 Optional.empty()로 값이 비어 있으므로 "Not Present"가 출력됩니다. 이처럼 ifPresentOrElse()를 활용하면 값의 존재 여부에 따른 처리 로직을 간결하고 가독성 있게 구현할 수 있습니다.