‣
프로그램 실행 중 발생할 수 있는 예상치 못한 에러를 처리하는 방법이다.
모든 에러와 예외 클래스는 Throwable
이라는 최상위 클래스를 상속받는다.
컴파일 시점에 체크할 수 있으므로 명시적인 예외 처리가 필요하다. 예를 들어 존재하지 않는 파일을 읽으라고 하는 것은 같이 흔하게 발생할 수 있고 예상이 되므로 예외 처리를 강제하고 있다.
참고로 요즘에는 Checked Exception에 대한 부정적인 의견도 있다고 한다. Checked Exception의 의도는 좋으나 실무에서 적용하기에 비효울적이고 단점이 있다는 말. 아래 글을 읽어보자.
https://velog.io/@eastperson/Java의-Checked-Exception은-실수다-83omm70j
런타임 시점에 체크할 수 있고 명시적인 처리가 필수적인 것은 아니다.
NullPointerException: null이 있으면 안 되는 위치에 null값이 포함되어 있을 때. 여기서 Pointer란 객체의 주소를 의미하는데 이것을 생각한다면 주소를 찾을 수 없는 예외를 의미한다고 볼 수 있다.
ArrayIndexOutOfBoundsException: 배열의 범위를 벗어났을 때
NumberFormatException: 문자열로 된 숫자형식을 parseInt()하려고 하는데 숫자타입으로 변경할 수 없는 문자열이 있을 때
ClassCastException: 실제 생성된 객체타입과 맞지 않아서 타입변환을 할 수 없을 때. 해당 예외를 발생시키지 않으려면 instanceof
연산자로 타입을 확인하는 것이 좋다.