IndexError
IndexError
주어진 인덱스(index)가 유효하지 않을 때 발생하는 예외예요. StandardError를 상속받는 예외 클래스고, 추가로 정의된 메서드는 없어요.
출처: Ruby 4.0 API
본문
배열처럼 인덱스로 원소를 꺼내는 컬렉션을 다룰 때, 그 인덱스가 배열 범위를 벗어나면 IndexError가 발생해요. 다만 Ruby에선 이런 접근이 항상 예외로 이어지진 않아요. 예외를 던지는 메서드와 조용히 nil을 돌려주는 메서드가 나뉘어 있어요.
a = [:foo, :bar]
a.fetch(0) #=> :foo
a[4] #=> nil
a.fetch(4) #=> IndexError: index 4 outside of array bounds: -2...2
여기서 a[4]는 []로 접근해서 범위 밖이면 nil을 돌려줘요. 반면 fetch(4)처럼 값을 강제로 가져오는 메서드는 범위를 벗어나면 IndexError를 던져요. a.fetch(4)의 에러 메시지가 index 4 outside of array bounds: -2...2라고 알려주는 걸 볼 수 있어요.
이처럼 IndexError는 응용 프로그램이 "없는 자리에 접근했다"는 걸 명시적으로 알아채야 할 때 만나게 되는 예외예요. 조용히 nil이 돌아오면 실수를 눈치채기 어려운 상황에서, fetch 계열 메서드가 예외로 알려주는 셈이죠.