티스토리 뷰

반응형

IndexOutOfBoundsException이란?

indexOutOfBoundsException은 리스트형 객체에서 선언되지 않은 요소를 get 하는 경우에 발생하게 된다.

 

틀린 에러 해결법 - null 판별

그렇다면 get 하기 전에 객체가 NULL 인지 판별해준다면 에러가 발생 안 하지 않을까? 정답은 NO다.

아쉽게도 아래의 코드에서도 동일하게 indexOutOfBoundsException 에러가 발생하게 된다.

아니 왜?! 객체가 null이 아니라면 첫 번째 요소가 존재하여 에러가 발생하지 않아야 하는 게 아닌가요??

if (tests != null)
	tests.get(0);

 

이미 null에 대한 validation을 했는데도 indexOutOfBoundsException이 발생하는 이유 바로 객체가 비어있는 한 상태, 즉 EMPTY 상태이기 때문이다. 

 

test = []  

(예를 들어, List<String> tests = new ArrayList<>() 을 정의할 경우 만들어지는 tests 객체의 상태)

 

이와 같은 상태로 tests 객체는 정의되어 있는 것이다.그렇기 때문에 empty 객체에서 element 를 가져오려고 하는 것이기 때문에 RunTimeException이 발생하게 된다.

 

진짜 에러 해결법 1 - size 판별

if (tests != null && tests.size() != 0)
	test.get(0);

진짜 에러 해결법 2 - ObjectUtils  사용

ObjectUtils의 isEmpty 함수는 null와 empty 둘다 validation 해주기 때문에 깔끔하게 에러 발생을 막을 수 있다. apache.commons.lang3.ObjectUtils 또는 springframework.util.ObjectUtils 라이브러리를 import 하여 해당 함수를 사용하면 된다.

if (ObjectUtils.isNotEmpty(tests))
	test.get(0);

또는

if (!ObjectUtils.isEmpty(tests))
	test.get(0);

 

반응형
반응형