Programming/Java

Java List null check 방법 (isEmpty, size)

Jan92 2023. 6. 9. 22:22
반응형

Java List null check

java list null check 방법

프로젝트를 진행하다 보면 List를 활용하는 부분에서 NullPointerException이 발생하는 경우를 생각보다 자주 접할 수 있는데요.

아래 내용은 java에서 list에 대한 null 체크를 하는 몇 가지 방법에 대해서 정리한 것입니다.

 


List.isEmpty(), List.size()

 

- isEmpty()

//Returns true if this list contains no elements
boolean isEmpty();

List interface의 isEmpty() 메서드는 해당 리스트 객체가 아무런 요소도 가지고 있지 않을 때(리스트가 비어있을 때) true를 반환합니다.

 

//NullPointerException 발생
List<String> list = null;
if (list.isEmpty()) {
    ...
}

//NullPointerException 발생을 막기 위해 null 여부를 함께 확인
List<String> list = null;
if (list == null || list.isEmpty()) {
   ...
}

하지만 위 코드와 같이 List 객체가 null 일 경우 isEmpty() 메서드 호출 시 NullPointerException이 발생하기 때문에 리스트가 null 인지 여부도 함께 확인해야 합니다.

 

 

 

- size()

//Returns the number of elements in this list. 
//if this list contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.
int size();

List interface의 size() 메서드는 해당 리스트의 요소 개수를 반환합니다.

만약 리스트가 비어 있을 경우 0을 반환하며, 요소의 수가 Integer.MAX_VALUE(2,147,483,647) 보다 많을 경우 Integer.MAX_VALUE를 반환하는데요. 때문에 해당 리스트의 사이즈가 0인지 여부를 판단하여 리스트가 비어있는지 확인할 수 있습니다.

 

//NullPointerException 발생
List<String> list = null;
if (list.size() == 0) {
    ...
}

//NullPointerException 발생을 막기 위해 null 여부를 함께 확인
List<String> list = null;
if (list == null || list.size() == 0) {
   ...
}

하지만 isEmpty()의 경우와 마찬가지로 List 객체가 null 일 경우 size() 메서드 호출 시 NullPointerException이 발생하기 때문에 리스트가 null 인지 여부도 함께 확인해야 합니다.

 

 

List interface에는 다음과 같이 List.isEmpty(), List.size() 메서드를 통해 해당 리스트가 비어있는지 여부를 확인할 수 있는데요.

'비어있는지' 여부를 확인하는 것이 목적이라면 isEmpty() 메서드를 사용하는 것이 size() 메서드를 통한 확인보다 코드상으로 더 직관적이지 않을까 하는 개인적인 생각입니다.

 

***

List가 null이라는 것은 해당 인스턴스가 생성되지 않았다는 것(메모리에서 참조하는 주소값이 없는 상태)을 의미하며, isEmpty()와 size() == 0은 해당 인스턴스는 생성된 상태이지만 List 내부의 요소가 존재하지 않는다는 것을 의미합니다.

 

 


CollectionUtils.isEmpty()

//Return true if the supplied Collection is null or empty. Otherwise, return false;
public static boolean isEmpty(@Nullable Collection<?> collection) {
    return (collection == null || collection.isEmpty());
}

//Return true if the supplied Map is null or empty. Otherwise, return false;
public static boolean isEmpty(@Nullable Map<?, ?> map) {
    return (map == null || map.isEmpty());
}

(org.springframework.util package CollectionUtils class)

 

스프링 프레임워크를 사용하는 경우 org.springframework.util 패키지의 CollectionUtils.isEmpty() 메서드를 사용할 수도 있는데요.

해당 메서는 인자로 전달된 객체가 null이거나 empty일 때 true를 반환합니다.

 

CollectionUtils.isEmpty()의 내부 구현 코드를 살펴보면, null 여부 확인과 함께 isEmpty() 메서드가 사용되는 것을 볼 수 있습니다.

때문에 해당 메서드를 사용할 경우 내부적인 동작 과정은 같지만 코드가 간결해진다는 장점이 있습니다.

 

 

***

Apache Commons 라이브러리에도 CollectionUtils.isEmpty() 메서드가 존재하는데요.

해당 기능을 사용할 경우 외부 라이브러리를 추가해서 사용해야 하기 때문에 우선적으로 고려되지는 않습니다.

반응형