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) 로 체크를 하는 게 가장 적합하다고 볼 수 있다
'Web Technologies 🖥️ > java' 카테고리의 다른 글
제네릭(Generic)을 써보고 싶어요 - JAVA (0) | 2024.01.20 |
---|---|
Java 로 테스트 코드를 작성하시나요? 그렇다면 "JUnit" (0) | 2024.01.19 |
테스트 코드(JUnit)에서 모의 객체가 필요할 땐? "Mockito" (0) | 2023.12.26 |
equals() 랑 "==" 랑 똑같은 거 아니였어? - JAVA (1) | 2023.12.17 |
scan.next() 사용 시 주의 사항 - JAVA (0) | 2023.12.14 |