본문 바로가기
TIL

Optional.ifPresentOrElse로 자바의 조건 분기 깔끔하게 처리하기

by 긍고 2024. 11. 19.
728x90
반응형

개요


자바에서 Optional은 널 값 처리와 관련된 문제를 효과적으로 해결해주는 유용한 클래스이다. 최근 프로젝트에서 Optional을 사용하다가 값을 조건에 따라 다르게 처리해야 하는 상황을 만났다. 기존에는 if-else 구문으로 처리했지만, Java 9부터 추가된 ifPresentOrElse 메서드를 사용하니 훨씬 깔끔하고 가독성이 좋아졌다. 이번 글에서는 ifPresentOrElse의 사용법과 활용 사례를 정리해보려고 한다.

 

Optional.ifPresentOrElse란?


Optional.ifPresentOrElse는 Optional에 값이 존재할 때와 존재하지 않을 때의 처리를 각각 지정할 수 있는 메서드이다. 이 메서드는 다음과 같은 구조를 가진다:

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
  • action: 값이 존재할 경우 실행할 로직을 작성한다. Consumer 타입으로 값을 매개변수로 받아 처리한다.
  • emptyAction: 값이 없을 경우 실행할 로직을 작성한다. Runnable 타입으로 매개변수를 받지 않는다.

ifPresentOrElse를 사용하면 값이 존재하는 경우와 없는 경우를 명확하게 구분할 수 있다. 또한, 조건 분기를 메서드 하나로 처리할 수 있어 코드가 간결해진다.

 

사용 예제


  • 값이 존재하는 경우
Optional<String> optional = Optional.of("Hello, World!");

optional.ifPresentOrElse(
    value -> System.out.println("값이 존재합니다: " + value),
    () -> System.out.println("값이 없습니다.")
);

// 값이 존재합니다: Hello, World!
  • 값이 없는 경우
Optional<String> optional = Optional.empty();

optional.ifPresentOrElse(
    value -> System.out.println("값이 존재합니다: " + value),
    () -> System.out.println("값이 없습니다.")
);

// 값이 없습니다.

 

728x90

기존 방식과의 비교


  • 기존 방식

값의 존재 여부에 따라 처리할 때, 기존에는 다음과 같은 방식으로 코드를 작성했을 것이다:

Optional<String> optional = Optional.ofNullable(value);

if (optional.isPresent()) {
    System.out.println("값이 존재합니다: " + optional.get());
} else {
    System.out.println("값이 없습니다.");
}

 

  • ifPresentOrElse 방식

위 코드를 ifPresentOrElse로 바꾸면 훨씬 간결하게 표현할 수 있다:

optional.ifPresentOrElse(
    value -> System.out.println("값이 존재합니다: " + value),
    () -> System.out.println("값이 없습니다.")
);

이처럼 ifPresentOrElse는 가독성을 높이고, Optional의 장점을 더욱 극대화할 수 있다.

 

실전 활용 사례


1. 사용자 로그인 처리

로그인을 시도한 사용자 정보가 존재하면 성공 메시지를 출력하고, 없으면 오류 메시지를 출력한다.

Optional<String> user = findUserById(1L);

user.ifPresentOrElse(
    username -> System.out.println("로그인 성공: " + username),
    () -> System.out.println("사용자를 찾을 수 없습니다.")
);

 

2. 기본 설정값 사용

설정값이 주어지지 않은 경우 기본값을 사용하는 로직을 작성할 수 있다.

Optional<String> config = getConfigValue();

config.ifPresentOrElse(
    value -> System.out.println("설정값: " + value),
    () -> System.out.println("기본 설정값을 사용합니다.")
);

 

주의 사항


 

  • 필요할 때만 사용하기
    ifPresentOrElse는 가독성이 좋은 대신 간단한 값 체크에 남용하면 오히려 코드가 복잡해질 수 있다. 적합한 상황에서 사용하는 것이 중요하다.
  • emptyAction에서 값 접근 불가
    emptyAction은 매개변수를 받지 않는 Runnable 타입이므로, 값에 접근할 수 없다. 이 점을 고려하여 로직을 작성해야 한다.

 

정리


Optional.ifPresentOrElse는 값을 조건에 따라 다르게 처리해야 하는 경우 간결하고 명확하게 코드를 작성할 수 있는 강력한 도구이다. 프로젝트에서 값을 직접 확인하지 않고도 Optional로 처리하는 방법을 배워보니 더욱 효율적이고 안정적인 코드를 작성할 수 있었다. 앞으로도 상황에 맞는 유용한 메서드들을 찾아 활용해보고 싶다.

 

728x90

댓글