# Error
- 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미
# Exception
- 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생한다
- 자바는 객체지향 언어이기 때문에 프로그램에서 발생하는 예외들을 클래스의 형태로 제공한다
- *check exception*, *Unchecked exception* 으로 나누어짐
## Check exception
- 파일 입출력(IOException), db연동(SQLException)
## Unchecked exception
- 위 두가지 제외하고 전부
# try-catch 사용 방법
*기본 예시*
```java
try {
//try 블록안에 예외가 발생할 수 있는 코드 명시
System.out.println(4/0);
} catch (ArithmeticException e) {
// catch 블럭안에 예외 발생시 처리할 코드 명시
System.out.println("0으로 나눌 수 없습니다");
}
```
*Exception 클래스를 사용하여 모든 예제를 처리*
```java
try {
//try 블록안에 예외가 발생할 수 있는 코드 명시
System.out.println(4/0);
} catch (Exception e) {
// Exception 클래스는 모든 예외를 처리한다
System.out.println("0으로 나눌 수 없습니다");
}
```
*다중 예외 처리 예시*
```java
Scanner sc = new Scanner(System.in);
try {
System.out.print("input number >> ");
int num1 = sc.nextInt();
System.out.print("input number >> ");
int num2 = sc.nextInt();
System.out.println(num1 / num2);
} catch (ArithmeticException e) {
System.out.println("0을 나눌수 없습니다");
} catch (InputMismatchException e) {
System.out.println("숫자만 입력 가능합니다");
}
```
# finally
- 예외 발생 유무와 상관없이 실행되는 구문이며 생략할 수 있다
- 예외처리를 할 때 예외와 상관없이 반드시 처리해야 하는 구문들을 작성할 때 사용됨
*finally 사용 예시*
```java title:finally
Scanner sc = new Scanner(System.in);
try {
System.out.println("점수를 입력하세요 : ");
int score = sc.nextInt();
if(score >= 65 ) {
System.out.println("합격");
} else {
System.out.println("불합격");
}
} catch (Exception e) {
System.out.println("잘못 입력하셨습니다");
} finally {
System.out.println("프로그램 종료");
}
```