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일 경우 빈 배열을 반환한 후, 배열을 리스트로 변환합니다.
위의 두 접근 방식은 모두 단일 표현식으로 안전하게 String의 List를 반환합니다.
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에서 확인할 수 있습니다.