예외 Exception
예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램은 곧바로 종료된다. 자바에서는 이러한 원치 않는 종료를 방지하기 위해 예외처리를 할 수 있다. 예외처리를 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.
일반예외 Checked Exception
- 컴파일러 체크 예외
- 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 자바 소스를 컴파일 하는 과정에서 해당 예외 처리 코드가 있는 지 검사한다.
- 만약 예외 처리 코드가 없다면 컴파일 오류가 발생한다.
실행예외 Runtime Exception
- 컴파일러 넌 체크 예외
- 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일 하는 과정에서 예외 처리 코드가 있는 지 검사하지 않는다.
- 만약 개발자가 실행 예외에 대해 예외 처리코드를 넣지 않았을 경우, 해당 예외가 발생하면 프로그램이 종료된다.
예외클래스 Exception Class
- 일반예외와 실행예외 클래스는 RuntimeException 클래스를 기준으로 구별한다.
- RuntimeException의 하위 클래스가 아니면 일반 예외 클래스이고, 하위클래스이면 실행 예외 클래스이다.
예외처리 try ~ catch
- 예외가 발생하지 않는 다면 catch 블록은 실행되지 않는다.
- try 블록에서 예외가 발생했을 경우 catch 블록이 실행된다.
- .close가 필요한 코드를 try 블록 안에 위치시키면 자동으로 종료시켜준다.
예외떠넘기기 throws
- 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 메소드를 호출한 곳으로 떠넘기는역할을 한다.
- throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열하면 된다.
명시적 오류처리 throw
- throws와 throw를 잘 구분하자.
- 일반적으로는 시스템이 적절한 예외 클래스를 자동으로 생성하여 처리를 담당하지만, 명시적으로 특정 예외 클래스를 생성하여 예외처리를 할 수도 있다.
- 기존의 예외 클래스로 예외 처리를 할 수 없다면 사용자만의 예외클래스를 작성하여 예외를 발생시킬 수 있다.
- 사용자가 예외클래스를 정의 하려면, 최상위 클래스인
java.lang.Exception
을 상속받아 작성한다.
public class Test {
public static void main(String[] args) {
int a = 0;
// 1 ~ 9 숫자가 아니면 예외를 발생시키기
try {
System.out.println("1 ~ 9 사이의 숫자를 입력해주세요.");
Scanner sc = new Scanner(System.in);
a = sc.nextInt();
if (a <= 0) {
throw new MyTest("범위를 벗어났습니다.");
}
if (a > 9) {
throw new MyTest("범위를 벗어났습니다.");
}
} catch (MyTest m) {
m.printStackTrace();
}
System.out.println(a);
}
}
Test 라는 클래스에서 1 ~ 9 까지의 숫자를 입력받아야 하는 상황이 생겼다. 1 ~ 9 이외의 숫자를 입력하면 예외를 발생시키고 싶다고 한다면, 사용자 예외 클래스를 사용할 수 있다.
public class MyTest extends Exception {
public MyTest(String message) {
super(message);
}
}
Exception 클래스를 상속받은 MyTest 라는 사용자 예외 클래스를 만들어서, throw new MyTest
로 객체를 생성해주었다. 그리고 원하지 않는 숫자를 입력해주었을 때, 프로그램이 종료되지 않고 "범위를 벗어났습니다." 라는 문장이 출력되도록 했다.
댓글