ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] List 에서 ObjectUtils.isEmpty() 를 이용한 null 체크(isEmpty(), != null)
    CS/Java 2022. 4. 1. 17:10
    반응형

    List 를 사용하여 데이터를 조회하다 보면, 조회된 데이터가 없을 경우 NullPointerException 등이 터질 수 있기 때문에 null 체크를 해주어야 합니다.

    1. List 가 null 일 경우

    인스턴스 자체가 생성되지 않았을 경우 List 는 null 값을 가진다. null 인 리스트를 조회하려고 하면, NullPointerException 이 터진다. null 체크는 "list == null" 로 할 수 있다.

    if(list != null){
    	// task
    }

    위 코드를 추가하면, list 가 null 이 아닌 경우에만 작업을 수행한다. 다만, 여전히 문제가 있다. 데이터를 받아오는 과정에서 list 에 null 이 아닌 빈 값이 저장되는 경우 위의 null 체크에 걸리지 않는다. (list == [])

    2. List 가 빈 값인 경우(list == [])

    데이터를 조회하여 List 에 넣어주는 경우 List 에 [] 빈 값이 들어가는 경우가 있다. 이 경우 java.util.List 에서 제공하는 isEmpty() 메소드를 사용하여 체크할 수 있다.

    if(list != null && !list.isEmpty()){
    	// task
    }

     

    이 경우, isEmpty() 전에 null 체크를 선행해주어야 한다. null 인 List 에 isEmpty() 메소드를 수행하면 NullPointerException 이 발생하기 때문이다. (마찬가지로, size() 메소드를 호출하는 경우에도 List 가 null 경우 NullPointerException 이 발생하기 때문에 null 체크가 필요하다.)

    3. ObjectUtils.isEmpty()

    org.springframework.util 라이브러리에서 제공하는 ObjectUtils.isEmpty() 를 사용하면 null 체크와 빈 문자열 체크를 동시에 할 수 있다.

    if(ObjectUtils.isEmpty(list)){
    	// task
    }

     

    코드를 살펴보면 내부적으로 null 체크와 isEmpty() 를 동시에 수행한다.

    // ObjectUtils
    public static boolean isEmpty(@Nullable Object obj) {
        if (obj == null) {
            return true;
        } else if (obj instanceof Optional) {
            return !((Optional)obj).isPresent();
        } else if (obj instanceof CharSequence) {
            return ((CharSequence)obj).length() == 0;
        } else if (obj.getClass().isArray()) {
            return Array.getLength(obj) == 0;
        } else if (obj instanceof Collection) {
            return ((Collection)obj).isEmpty();
        } else {
            return obj instanceof Map ? ((Map)obj).isEmpty() : false;
        }
    }

     

    Collection 에 한정하여 사용할 수 있는 CollectionUtils.isEmpty() 도 있다.

    // CollectionUtils
    public static boolean isEmpty(@Nullable Collection<?> collection) {
        return collection == null || collection.isEmpty();
    }

    내부적으로 null, isEmpty() 를 수행하는 것은 동일하다.

     

    정리

    NullPointerException 을 피하기 위해서 CollectionUtils.isEmpty(), ObjectUtils.isEmpty() 을 사용하는 것이 가장 좋아보인다.

    반응형
Designed by Tistory.