SpringBoot 효율적인 Null 체크

컴개론·2024년 11월 24일

SpringBoot 효율적인 Null 체크

SpringBoot를 사용하면서 Null 체크는 필수적인 작업이다. NullPointerException은 예상치 못한 곳에서 발생할 수 있어, 이를 방지하기 위한 다양한 방법들이 존재한다. 오늘은 SpringBoot에서 효율적으로 Null 체크를 수행하기 위해 OptionalStream을 사용하는 방법을 공부했다.

Optional을 활용한 Null 체크

Java 8에서 도입된 Optional 클래스는 Null을 명시적으로 처리할 수 있는 방법을 제공한다. Optional을 사용하면 객체가 존재할 수도 있고, 존재하지 않을 수도 있는 상황을 보다 명확하게 표현할 수 있다. 이를 통해 코드의 가독성을 높이고, NullPointerException을 방지할 수 있다.

Optional의 기본 사용법

Optional은 주로 다음과 같은 메서드들을 사용하여 Null 체크를 수행한다:

  • Optional.ofNullable(): 객체가 Null인지 아닌지를 확인하고, Null일 경우 빈 Optional 객체를 반환한다.
  • map(): Optional 객체가 값을 가지고 있을 경우, 해당 값을 변환하여 새로운 Optional 객체를 반환한다.
  • orElseThrow(): Optional 객체가 값을 가지고 있지 않을 경우, 지정된 예외를 발생시킨다.

Stream을 활용한 데이터 처리

Java의 Stream API는 컬렉션 데이터를 처리하는 데 있어 강력한 도구이다. Stream을 사용하면 데이터의 필터링, 매핑, 축소 등의 작업을 간결하게 수행할 수 있다. 특히, Optional과 함께 사용하면 더욱 효율적인 Null 체크 및 데이터 처리가 가능하다.

실전 예제 코드

다음은 OptionalStream을 활용하여 SpringBoot에서 Null 체크를 수행하는 예제 코드이다:

ResponseEntity<VelogPostResponseDto> response = sendPostRequest(webClient, query, cookie);

Optional.ofNullable(response.getBody()) // Response body의 null 체크
        .map(VelogPostResponseDto::getData)
        .map(VelogPostResponseDto.VelogResponseData::getWritePost) // Posting 실패 예외처리
        .orElseThrow(() -> {
            updateVelogTokens(member, response.getHeaders()); // Token 업데이트
            throw new CustomException(ErrorCode.VELOG_POSTING_ERROR); // Retry 될 수 있도록 예외 Throw
        });

코드 설명

  1. sendPostRequest 메서드를 통해 ResponseEntity 객체를 받아온다.
  2. Optional.ofNullable(response.getBody())를 사용하여 Response body가 Null인지 체크한다.
  3. map 메서드를 사용하여 VelogPostResponseDto 객체의 데이터를 추출하고, 필요한 경우 변환 작업을 수행한다.
  4. orElseThrow를 통해 만약 데이터가 존재하지 않을 경우, 예외를 발생시킨다. 이 과정에서 토큰 업데이트 등의 추가 작업도 수행할 수 있다.

이와 같은 방법을 통해 SpringBoot 애플리케이션에서 보다 안전하고 효율적인 Null 체크를 수행할 수 있다. OptionalStream을 적절히 활용하면 코드의 가독성을 높이고, 예외 처리 로직을 간결하게 유지할 수 있다.

0개의 댓글