예외 처리

다람·2023년 2월 24일
0

JAVA

목록 보기
23/27
post-thumbnail

오류와 예외

자바 프로그램을 작성할 때 자바 문법에 맞지 않게 코드를 작성하고 컴파일하려할 때 문법 오류를 발생시킨다.

오류

  • 시스템 레벨에서 프로그램에서 심각한 문제를 야기하며 실행 중인 프로그램을 종료시킨다.
  • 오류는 개발자가 미리 예측하여 처리할 수 없다.

예외

  • 발생할 수 있는 상황을 미리 예측해 처리할 수 있다.
  • 예외 처리를 통해 예외 상황을 처리할 수 있도록 코드의 흐름을 바꿀 필요가 있다.

예외 처리 (exception handling)

try / catch / finally 문 사용
catch, finally 블록은 선택적인 옵션으로 반드시 사용할 필요는 없다.

try{
	// 기본적으로 가장 먼저 실행되는 코드
	예외를 처리하길 원하는 실행 코드;
} catch (e1){
	// try 블록에서 발생한 예외 코드나 예외 객체를 인수로 전달받아 그 처리를 담당
	e1 예외가 발생할 경우에 실행될 코드;
} catch (e2){
	e2 예외가 발생할 경우에 실행될 코드;
} 
...
finally{
	// try 블록에서 예외가 발생하건 안하건 맨 마지막에 무조건 실행
	예외 발생 여부와 상관없이 무조건 실행될 코드;
}

예외처리 메커니즘

예외 클래스

Exception 클래스

  1. RuntimeException 클래스
  • RuntimeException 클래스를 상속받은 자식 클래스들은 주로 치명적인 예외 상황을 발생시키지 않는 예외들로 구성된다. 따라서 try/catch문을 사용하기보다 예외가 발생하지 않도록 주의를 기울이기
  1. 그 외의 Exception 클래스의 자식 클래스

Exception 클래스에 속하는 자식 클래스들은 치명적인 예외 상황을 발생시키므로 반드시 try/catch 문을 사용하여 예외를 처리해야 한다.

byte[] list = {'a', 'b', 'c'};

try {
    System.out.write(list);
} catch (IOException e) {
    e.printStackTrace();
}

예외 처리의 계층 관계

try {
    System.out.write(list);
} catch (Exception e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

예제에서 IOException이 발생하면 첫 번째 catch블록부터 순서대로 해당 예외를 처리할 수 있는지 검사한다.
그런데 IOException은 Exception의 자식 클래스이므로 첫번째 catch 블록에서도 IOException은을 처리할 수 있다.
IOException만 따로 처리하고자 한다면 아래 예제처럼 순서를 바꿔야 한다.

try {
    System.out.write(list);
} catch (IOException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

여러 예외 타입 동시 처리

java SE7부터 가능

try {
    this.db.commit();
} catch (IOException | SQLException e) {
    e.printStackTrace();
}

Throwable 클래스

  • 모든 예외의 조상이 되는 Exception클래스와 모든 오류의 조상이 되는 Error클래스의 부모 클래스이다.
  • Throwable 타입과 이 클래스를 상속받은 서브 타입만이 JVM이나 throws 키워드에 의해 던져질 수 있다.

이 클래스에는 예외나 오류에 관한 다양한 정보를 확인할 수 있는 메서드가 포함

try {
    System.out.println(5 / 0);
} catch (ArithmeticException e) {
    System.out.println("현재 발생한 예외 정보 : " + e.getMessage());
}

// 실행결과
현재 발생한 예외 정보 : / by zero

자주 사용되는 예외 클래스

profile
안녕

0개의 댓글