예외(Exception)
* 오류의 종류
- 컴파일 에러 : 프로그램의 실행을 막는 소스코드상의 문법에러. 소스코드 수정으로 해결.
- 런타임 에러 : 프로그램 실행 중 발생하는 에러. 주로 if문 사용으로 에러 처리(ex. 배열의 인덱스 범위를 벗어났거나, 계산식의 오류)
- 시스템 에러 : 컴퓨터 오작동으로 인한 에러, 소스 코드 수정으로 해결 불가
- 해결방법 : 소스코드 수정으로 해결 가능한 에러를 예외(Exception)라고 하는데 이러한 예외 상황(예측 가능한 에러) 구문을 처리하는 방법인 예외처리를 통해 해결
- 예외의 2가지 종류
* UnChecked Exception : RuntimeException과 자식 예외를 지칭함. 프로그램 수행중 개발자의 코딩 실수 또는 사용자의 잘못된 값 입력으로 흔하게 발생할 수 있는 예외. 예외 처리 구문이 아니라 If문 같은 단순 코드로 해결이 가능
* Checked Exception : RuntimeException과 자식 예외를 제외한 나머지 예외. if문과 같은 단순 코드로 해결이 불가능하여 반드시 예외 처리 구문을 작성해야함
try - catch
- try { } : 괄호 내부에 예외가 발생할 가능성이 있는 코드를 작성한 후 시도
- catch(예외) { } : try 구문에서 발생한 예외를 잡아내서 처리하여 프로그램이 비정상 종료되지 않도록 함
-->> try 구문안에 예외가 발생할 가능성이 있는 코드를 작성하고 (정수를 입력하는 과정에서 정수가 아닌 문자를 입력했을때 발생할수 있는 InputMismatchException), catch 구문에서 예외를 잡아내고 처리한다.
Exception 클래스
- 모든 예외의 최상위 부모
- e.printStackTrace() : 발생한 예외의 메소드와 위치에 대한 모든 내용을 출력, 예외 발생 지점 추적
Try - catch - finally
- Finally : Try 구문에서 예외가 발생하든말든 무조건 마지막에 수행
Throw, throws
- Throws : 호출한 메소드에게 예외를 던짐 -> 호출한 메소드에게 예외를 처리하라고 위임하는 행위
- throw : 예외 강제 발생 구문(현재 메소드에 예외를 던짐)
Exception과 오버라이딩
- 오버라이딩 시 throws하는 Exception의 개수와 상관없이 처리범위가 같거나 후손 이여야 함