Null Array to Empty List in Java

1. 개요

Java 프로그래밍에서 단순함은 종종 null 값 처리 뒤에 숨겨져 있습니다, 특히 배열을 다룰 때 더욱 그렇습니다. 마찬가지로, 잠재적으로 null인 배열을 빈 List로 변환하는 것은 단순히 NullPointerException을 방지하는 것뿐만 아니라, 강건한 코드를 만드는 것에 관한 것입니다.

이 튜토리얼에서는 nullable 배열을 안전하게 List로 변환하는 여러 접근 방식을 논의합니다.

2. 설정

먼저, 구현에 사용할 메서드 시그니처를 정의해 보겠습니다:

static List<String> getAsList(String[] possiblyNullArray) {
    // Implementation: return nullable array as list 
}

우리는 possiblyNullArray를 메서드 인수로 받아서 원래 배열의 모든 값을 포함하는 null이 아닌 리스트를 반환합니다. 중요하게도, 원래 배열이 null이거나 비어 있을 경우, 최종 리스트는 비어 있게 됩니다.

이제 몇 가지 접근 방식을 살펴보겠습니다.

3. Java 8+ 스트림 사용

첫 번째 구현에서는 Java Streams API를 사용합니다. Java 8에서는 누락되거나 null 값을 처리하기 위해 Optional 클래스를 도입했습니다.

먼저 Optional.ofNullable()을 사용하여 이 잠재적 null 배열을 처리해 보겠습니다:

return Optional.ofNullable(possiblyNullArray)
  .map(Arrays::stream)
  .orElseGet(Stream::empty)
  .collect(Collectors.toList());

배열을 Optional로 감싸고, 값을 stream()으로 변환하려고 시도합니다. 배열이 null일 경우, 우리는 값의 스트림 대신 빈 스트림을 얻게 됩니다. 이것은 우리가 collect()을 통해 리스트로 변환할 때, 결과가 배열의 값들로 이루어진 리스트이거나 빈 리스트가 되도록 보장합니다.

값을 스트리밍하는 것을 피하고 싶다면, Optional의 기본값 처리를 다소 다르게 할 수 있습니다:

return Arrays.asList(Optional.ofNullable(possiblyNullArray).orElse(new String[0]));

여기에서 우리는 원래 배열이 null일 경우 빈 배열을 반환한 후, 배열을 리스트로 변환합니다.

위의 두 접근 방식은 모두 단일 표현식으로 안전하게 StringList를 반환합니다.

4. 삼항 연산자 사용

Java 8 이전에는, null을 체크하고 배열이 null일 때 빈 List를 반환하기 위해 간단한 삼항 연산자를 사용할 수 있습니다:

return (possiblyNullArray == null) ? Collections.emptyList() : Arrays.asList(possiblyNullArray);

위의 예는 간단한 if/else 표현입니다: 배열이 null이면 빈 List를 반환하고, 그렇지 않으면 Arrays.asList()를 사용합니다. – 간단하고 우아한 해결책입니다.

5. Apache Commons Lang 사용

때때로 작업을 대신하기 위해 외부 의존성을 사용하고 싶을 수 있습니다. 세 번째 구현에서는 핵심 Java API를 넘어 Apache Commons Lang을 사용합니다.

이 라이브러리는 null 배열을 빈 배열로 변환하는 ArrayUtils 클래스를 제공합니다:

String[] notNullArray = ArrayUtils.nullToEmpty(possiblyNullArray);
return Arrays.asList(notNullArray);

그 후에는 배열을 리스트로 변환하는 것만 남아 있습니다.

6. 검증

모든 구현을 살펴보았으니, 다음 세 가지 테스트를 통해 각 구현을 실행해 보겠습니다:

@Test
public void whenArrayIsNull_thenReturnEmptyList() {
    String[] possiblyNullArray = null;

    assertThat(getAsList(possiblyNullArray)).isNotNull().isEmpty();
}

@Test
public void whenArrayIsEmpty_thenReturnEmptyList() {
    String[] possiblyNullArray = {};

    assertThat(getAsList(possiblyNullArray)).isNotNull().isEmpty();
}

@Test
public void whenArrayIsNotEmpty_thenReturnListWithSameElements() {
    String[] possiblyNullArray = {"a", "b"};

    assertThat(getAsList(possiblyNullArray)).containsExactly(possiblyNullArray);
}

이 세 가지 시나리오를 통해 우리는 null 배열, 빈 배열, 일부 값을 가진 배열 등 이 문제의 모든 가능한 경우를 다루었습니다.

7. 결론

이 기사에서는 가능한 NullPointerException을 피하면서 nullable 배열을 List로 변환하는 여러 접근 방식을 배웠습니다. Java 8+에서 Optional 기능을 사용하는 구현, 삼항 연산자, 그리고 마지막으로 Apache Commons와 같은 외부 라이브러리를 사용하는 방법을 살펴보았습니다.

항상 그렇듯이, 이 기사에서 사용된 전체 코드는 GitHub에서 확인할 수 있습니다.

원본 출처

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다