본문 바로가기
Web Technologies 🖥️/java

List 의 사이즈 및 null 체크를 하고 싶다고? - JAVA

by dudefromkorea 2023. 12. 29.

List 를 이용하여 데이터를 다룰 때 에러 처리 및 신규 생성, 기타 등등 상황들에서

사이즈를 체크하거나 null 여부를 체크해야 하는 상황들이 발생하는데

 

이때 어떤 함수나 라이브러리를 사용하는 것이 좋을까요?

이번 시간에 알아보도록 하겠습니다

 

 

<List Interface>

Collection Interface 를 상속받는 List Interface 는 순서가 있는 Collection 을 나타낸다

List Interface 는 요소들을 특정 순서대로 유지하고, 중복된 요소들의 존재를 허용한다

 

size()

int 타입을 반환하는 메소드로 컬렉션의

정확한 크기를 알 수 있다는 장점이 존재한다

하지만 단순히 컬렉션이 비어 있는지 체크하고 싶은 경우

isEmpty() 보다 미세하게 더 많은 계산을 수행할 수 있다

List Interface 의 size() 메소드 예시

List<String> strList = Arrays.asList("eins", "zwei", "drei");
int strListSize = strList.size(); // strListSize = 3

 

isEmpty()

boolean 타입을 반환하는 메소드로 컬렉션이

비어 있는지 여부를 직관적으로 확인할 수 있다

컬렉션의 실제 크기에 대한 정보를 받을 수는 없지만

  비어 있는지만 확인하는 경우 size() > 0 에 비해 성능상 이점이 있을 수 있다

(true: List is empty / false: List is not empty)

List Interface 의 isEmpty() 메소드 예시

List<String> strList = Arrays.asList("eins", "zwei", "drei");
boolean strListEmptyFlag = strList.isEmpty(); // false

 

주의점

Java 에서 null 참조에 대한 메소드 호출은

항상 NullPointerException 을 발생시키는 기본 동작 때문에

항상 size() 나 isEmpty() 실행 전 null 체크가 필히 선행되어야 한다

NullPointerException 을 방지하기 위한 null 체크 예시

if (strList != null && strList.isEmpty()) {}

if (strList != null) {
    int strListSize = strList.size();
    // 이후 로직
}

 

Iterator

iterator() 를 사용하여 리스트의 반복자를 얻고

hasNext() 를 사용하여 다음 요소를 확인하는 방법이다

 

컬렉션 전체를 탐색하지 않고

첫 번째 요소의 존재 여부만으로 null 체크를 할 수 있으며

성능은 보장되지 않지만 사이즈를 계산할 수 도 있다

(true: List is not empty / false: List is empty)

Iterator 와 hasNext() 를 사용한 예시

List<String> strList = new ArrayList<>();
boolean strListEmptyFlag = strList.iterator().hasNext();

 

Iterator 를 사용한 사이즈 계산 예시

List<String> strList = new ArrayList<>();
Iterator<String> iterator = strList.iterator();

int strListSize = 0;
while (iterator.hasNext()) {
    iterator.next();
    strListSize++;
}

 

Iterables.isEmpty(Guava)

Google 의 Guava 라이브러리를 사용하여 컬렉션을 체크한다

 외부 라이브러리이고, 라이브러리의 크기가 크다는 단점이 존재하지만

 장점으로는 별도의 null 참조에 대한 처리가 필요 없다는 점

(true: List is not empty / false: List is empty)

Guava 의 Iterables.isEmpty 예시

List<String> strList = new ArrayList<>();
boolean strListEmptyFlag = Iterables.isEmpty(strList);

 

CollectionUtils.isEmpty(Apache Commons Collections)

Apache Commons Collections 라이브러리를 사용하여 컬렉션을 체크한다

마찬가지로 외부 라이브러리라는 단점이 존재하지만

이 또한 null 참조에 대한 별도의 에러 처리가 필요하지 않다

(true: List is not empty / false: List is empty)

Collections.isEmpty(Apache Commons Collections)

List<String> strList = new ArrayList<>();
boolean strListEmptyFlag = CollectionUtils.isEmpty(strList);

 

 

이 외에도 Stream API 를 이용하거나

for each 문을 사용하는 방법도 존재하지만

 

기본적인 상황에서 컬렉션의 사이즈를 체크할 때는 size() 가 가장 적합하고

 컬렉션의 null 여부를 확인할 때는 외부 라이브러리를 사용하지 않는 경우

직접적으로 if(list == null) 로 체크를 하는 게 가장 적합하다고 볼 수 있다

 

728x90
반응형