SpringBoot 효율적인 Null 체크

컴개론·2024년 11월 24일

SpringBoot 효율적인 Null 체크

SpringBoot 애플리케이션을 개발하면서 Null 체크는 필수적인 작업이다. NullPointerException을 방지하고 코드의 안정성을 높이기 위해 다양한 방법을 사용할 수 있다. 오늘은 SpringBoot에서 효율적으로 Null 체크를 수행하기 위해 OptionalStream을 사용하는 방법을 공부했다.

Optional을 활용한 Null 체크

Java 8에서 도입된 Optional은 Null을 처리하는 데 유용한 도구다. Optional은 값이 존재할 수도 있고 존재하지 않을 수도 있는 컨테이너 객체로, Null을 직접 다루는 대신 Optional을 사용하여 Null을 안전하게 처리할 수 있다.

Optional 사용 예제

다음은 Optional을 사용하여 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
    });

위 코드에서 Optional.ofNullable() 메서드를 사용하여 response.getBody()의 결과가 Null인지 아닌지를 체크한다. 만약 Null이 아니라면 map() 메서드를 통해 연속적으로 데이터를 변환하고, 최종적으로 orElseThrow()를 사용하여 Null일 경우 예외를 던진다.

Stream을 활용한 Null 체크

Stream API는 컬렉션 데이터의 처리를 간결하게 만들어준다. Stream을 사용하면 Null 체크뿐만 아니라 데이터의 필터링, 매핑, 수집 등을 쉽게 수행할 수 있다.

Stream 사용 예제

Stream을 활용하여 Null 체크를 수행하는 방법은 다음과 같다:

List<VelogPostResponseDto> responses = getResponses();

responses.stream()
    .filter(Objects::nonNull) // Null 체크
    .map(VelogPostResponseDto::getData)
    .map(VelogPostResponseDto.VelogResponseData::getWritePost)
    .forEach(data -> {
        // 데이터 처리 로직
    });

위 코드에서는 filter(Objects::nonNull)을 사용하여 Null이 아닌 객체만을 처리하도록 필터링한다. 이후 map()을 통해 데이터를 변환하고, forEach()를 통해 각 데이터를 처리한다.

결론

SpringBoot에서 Null 체크를 효율적으로 수행하기 위해 OptionalStream을 활용할 수 있다. Optional은 Null을 안전하게 처리하는 데 유용하며, Stream은 데이터의 필터링과 변환을 간결하게 만들어준다. 이러한 도구들을 적절히 활용하여 코드의 안정성과 가독성을 높일 수 있다. Null 체크는 작은 부분이지만, 애플리케이션의 안정성을 크게 향상시킬 수 있는 중요한 요소다.

0개의 댓글