(1) 예외 처리란?

 코드를 완성했다고 항상 프로그램이 성공적으로 작동하는 것은 아니다. 다양한 예외 상황이 발생할 수 있는데, 이것에 대응하기 위해 예외처리 코드가 필요하다. 즉, 예외의 발생으로 인해 프로그램의 비정상적인 종료를 막기위해, 또한, 개발자에게 알려 코드를 보완할 수 있도록 하기위해 예외 처리를 사용한다.

 자바는 상속을 이용해서 모든 예외를 표현한다. 모든 예외 클래스틑 Throwable의 자손 클래스다. Throwalbe 에는 크게 두종류의 자식 클래스가 있다. 

구분		설명
--------------------------------------------------------------------------------
Error		프로그램이 종료되어야 하는 심각한 문제를 표현한다. 
		대부분 컴퓨터나 JVM이 시스템적으로 동작할 수 없는 상황을 표현한다. 
Exception	프로그램이 종료되지 않지만, 예외나 문제상황을 표현하기 위해 사용한다.

 자바에는 미리 정의되어 있는 예외 클래스들이 있다. 기본적으로 이미 있는 것을 사용하되, Throwable 또는 그 하위 클래스를 상속받아 예외클래스를 정의할 수 있다.

예외처리 상속 구조

(2) 예외처리 형식

기본적으로 예외처리는 다음과 같은 형식으로 사용한다.

try {
    // 예외가 발생할 가능성이 있는 코드를 구현합니다.
} catch (FileNotFoundException e) {
    // FileNotFoundException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다.
} catch (IOException e) {
    // FileNotFoundException이 아닌 IOException이 발생했을 경우,이를 처리하기 위한 코드를 구현합니다.
} finally {
    // 예외의 발생여부에 관계없이 항상 수행되어야하는 코드를 구현합니다.
}

예시를 들면 다음과 같이 사용할수 있다.

class ArrayCalculation {

    int[] arr = { 0, 1, 2, 3, 4 };

    public int divide(int denominatorIndex, int numeratorIndex) {
        return arr[denominatorIndex] / arr[numeratorIndex];
    }
}

public class main {
    public static void main(String[] args) {
        ArrayCalculation arrayCalculation = new ArrayCalculation();

        System.out.println("2 / 1 = " + arrayCalculation.divide(2, 1));

        try{
            System.out.println(
                "1 / 0 = " + arrayCalculation.divide(1, 0)); // java.lang.ArithmeticException: "/ by zero"
        } catch (ArithmeticException e){
            System.out.println("잘못된 계산입니다. " + e.getMessage());
        }

        try{
        System.out.println("Try to divide using out of index element = "
                           + arrayCalculation.divide(5, 0)); // java.lang.ArrayIndexOutOfBoundsException: 5
        } catch (ArrayIndexOutOfBoundsException e){
            System.out.println(
                "잘못된 index 범위로 나누었습니다. 범위는 0부터"  +
                (arrayCalculation.arr.length - 1) +
                "까지입니다.");
        }
    }
}

 

위 코드의 결과

 

+ Recent posts