#013 예외(Exceptions)
이 장에서는 효과적으로 예외를 사용하는 지침을 제공한다.
예외 상황에서만 예외를 사용하자
/ 예외의 터무니 없는 사용. 절대 이렇게 하지 말자!
try {
int i = 0;
while(true)
range[i++].climb();
}
catch(ArrayIndexOutOfBoundsException e) {
}
위의 코드는 예외를 이용하여 while 루프문을 종료시키고 있다.
배열의 범위를 벗어나는 최초의 배열 요소를 사용하려는 순간, ArrayIndexOutOfBoundsException 예외가 발생하고(throw), 검출되고(catch), 무시되면서 이 무한 루프는 종료된다.
이런 식의 코드는 본래의 목적을 혼란스럽게 하고 성능을 저하시키며, 코드가 제대로 동작하는 것을 보장하지 못한다.
코드의 취지와 무관한 버그가 생겨 우리도 모르는 사이에 루프 실행이 실패하고 버그를 감추게 되어 디버깅이 무척 복잡해진다.
예외는 예외적인 상황에서 사용하기 위해 설계된 것이니, 정상적인 흐름 제어에 예외를 사용하지 말자.
복구 가능 상황에는 checked 예외를 사용하고 런타임 예외는 프로그램 에러에 사용하자
자바에서는 던질 수 있는(throwable) 세 종류의 예외를 제공한다.
1. checked 예외
명시적으로 try-catch-finally 예외 처리를 해야하는 것
2. runtime 예외
JVM이 정상적으로 작동하는 동안에 발생하는 예외
3. error
프로그램이 catch 해서는 안되는 심각한 문...