예외처리
예외와 예외 클래스
- 에러
- 응용프로그램 실행 오류가 발생하는 것
- JVM 위에서 실행되는 프로그램을 아무리 견고하게 만들어도 실행 불능
- 예외
- 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생되는 오류
- 예외처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 한다
일반 예외 VS 실행 예외

두 가지 모두 예외 처리가 필요하다.
- 일반 예외(Exception)
- 컴파일러 체크 예외라고도 한다
- 자바 소스를 컴파일하는 과정에서 예외처리 코드가 필요한지 검사하기 때문
- 실행 예외(Runtime Exception)
- 컴파일하는 과정에서 예외 처리 코드를 검사하지 않는 예외
- 오로지 개발자의 경험에 의해서 예외 처리 코드를 삽입
예외 처리 코드

프로그램에서 예외서 발생했을 경우 종료를 막고, 정상 실행을 유지할 수 있도록 처리하는 코드
try-catch-finally 블록을 이용
- try 블록에는 예외 발생 가능 코드가 위치한다.
- try 블록의 코드가 예외 발생 없이 정상 실행되면 finally 블록의 코드를 실행
- finally 블록은 옵션으로 생략 가능
예외 종류에 따른 처리 코드
- 다중 catch
- 발생되는 예외별로 예외 처리 코드를 다르게 해야할 때
- catch 블록이 여러 개라 할지라도 단 하나의 블록만 실행된다.
- catch 순서
- 주의할 점은 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다.
예외 떠넘기기
try-catch 블록으로 예외를 처리하는 것이 기본이지만, 경우에 따라서는 예외를 떠넘길 수 있다.
- thorws
- 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할
- throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열
사용자 정의 예외와 예외 발생
개발하다보면 자바 표준 API에서 제공하는 클래스만으로 표현하기는 부족하다.

- 일반 예외로 선언할 수 있고, 실행 예외로 선언할 수 있다.
- 일반 예외일 경우
- 실행 예외일 경우