12.2. 프로그램언어 자바(Java)에서의 예외처리의 유형들

프로그램언어 자바(Java)의 체크 예외

자바(Java) 프로그래밍 언어에서 체크 예외(Checked Exception)는 컴파일러가 강제로 예외 처리를 요구하는 예외를 말합니다. 이러한 예외는 RuntimeException을 상속받지 않고 Exception 클래스를 상속받아 만들어집니다. 체크 예외는 메소드를 호출할 때 반드시 예외 처리를 해주어야 하며, 이를 처리하지 않으면 컴파일 오류가 발생합니다.

체크 예외를 처리하는 방법으로는 try-catch 블록을 사용하거나 예외를 throws하여 상위 호출자에게 예외 처리를 위임하는 방법이 있습니다. 이를 통해 프로그램이 예외 상황에 대비하여 안정적으로 동작할 수 있도록 할 수 있습니다.

아래는 자바에서 체크 예외를 사용하는 간단한 예제 코드입니다.


public class CheckedExceptionExample {
    public static void main(String[] args) {
        try {
            readFile("example.txt");
        } catch (IOException e) {
            System.out.println("파일을 읽는 중 오류가 발생했습니다: " + e.getMessage());
        }
    }
    
    public static void readFile(String fileName) throws IOException {
        // 파일을 읽는 코드
        // 예외 발생 시 IOException을 던짐
    }
}
    

프로그램언어 자바(Java)에서의 언체크 예외

언체크 예외(Unchecked Exception)는 프로그램 실행 중 발생할 수 있는 예외 상황을 미리 예측하여 처리하는 것이 아니라, 예외가 발생했을 때 프로그램이 강제 종료되거나 예외를 처리하지 않고 그대로 전파되는 예외를 말합니다. 이러한 예외는 개발자가 명시적으로 예외 처리를 하지 않아도 되는 경우가 많아 편리하게 사용할 수 있습니다.

언체크 예외는 주로 RuntimeException 클래스 및 그 하위 클래스들에 속하며, 대표적으로 NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException 등이 있습니다. 이러한 예외는 컴파일러가 강제로 예외 처리를 요구하지 않기 때문에 개발자가 예외 처리를 하지 않아도 컴파일이 가능합니다.

언체크 예외의 예제 코드를 살펴보겠습니다. 아래의 코드는 배열에서 특정 인덱스의 값을 출력하는 간단한 예제입니다. 이때 배열의 길이를 초과하는 인덱스를 사용하면 ArrayIndexOutOfBoundsException이 발생합니다.


public class UncheckedExceptionExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};

        // 배열의 길이를 초과하는 인덱스를 사용하여 예외 발생
        System.out.println(numbers[3]);
    }
}

위의 예제 코드에서 numbers 배열의 길이는 3이지만 인덱스 3을 사용하여 값을 출력하려고 하면 ArrayIndexOutOfBoundsException이 발생합니다. 이때 개발자가 예외 처리를 하지 않아도 되기 때문에 컴파일 오류가 발생하지 않고 프로그램이 실행됩니다.

프로그램언어 자바(Java)의 오류 예외류

자바(Java)의 오류와 예외류

자바 프로그래밍에서 오류와 예외는 중요한 개념입니다. 오류는 프로그램 실행 중 발생하는 문제를 가리키며, 예외는 프로그램 실행 중 예기치 않은 상황을 의미합니다. 자바는 이러한 오류와 예외를 처리하기 위한 다양한 메커니즘을 제공합니다.

오류(Error)

오류는 시스템 수준의 심각한 문제로, 프로그램에서 복구할 수 없는 상황을 나타냅니다. 주로 메모리 부족, 라이브러리 누락 등과 같은 심각한 문제가 발생할 때 발생합니다. 오류는 Error 클래스를 상속받아 정의되며, 프로그램에서 직접 처리할 수 없습니다.

예외(Exception)

예외는 프로그램 실행 중 발생하는 예기치 않은 상황을 의미하며, 예외는 Exception 클래스를 상속받아 정의됩니다. 예외는 프로그램에서 처리할 수 있으며, 예외 처리를 통해 프로그램의 안정성을 높일 수 있습니다.

자바의 예외 처리

자바에서는 try-catch-finally 블록을 사용하여 예외를 처리합니다. try 블록에서 예외가 발생할 수 있는 코드를 작성하고, catch 블록에서 예외를 처리합니다. finally 블록은 예외 발생 여부에 상관없이 항상 실행되는 블록입니다.

예외 클래스 계층 구조

자바의 예외 클래스는 Throwable 클래스를 상속받는 형태로 계층 구조를 가지고 있습니다. Throwable 클래스의 하위 클래스로는 Error와 Exception이 있으며, Exception 클래스는 다시 Checked Exception과 Unchecked Exception으로 나뉩니다.

예외 종류

Checked Exception은 컴파일 시 예외 처리가 강제되는 예외로, IOException, SQLException 등이 이에 해당합니다. Unchecked Exception은 런타임 시 발생하는 예외로, NullPointerException, ArrayIndexOutOfBoundsException 등이 여기에 속합니다.

예제 코드


public class ExceptionHandlingExample {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("Error: Division by zero");
        }
    }

    public static int divide(int num1, int num2) {
        return num1 / num2;
    }
}
    

위 예제 코드는 divide 메소드에서 0으로 나누는 경우 ArithmeticException이 발생할 수 있습니다. 이를 try-catch 블록을 사용하여 예외를 처리하고, “Error: Division by zero”를 출력하도록 구현되어 있습니다.

프로그램언어 자바(Java)에서의 런타임 예외

런타임 예외(Runtime Exception)는 프로그램이 실행 중에 발생하는 예외로, 컴파일 시에 확인되지 않고 런타임 시에 발생합니다. 자바(Java)에서는 런타임 예외가 발생하면 프로그램이 비정상적으로 종료될 수 있습니다. 이러한 예외는 개발자가 미리 예측하고 처리할 수 있어야 합니다.

런타임 예외는 주로 프로그램의 로직 오류나 잘못된 사용자 입력에 의해 발생합니다. 대표적인 런타임 예외로는 NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException 등이 있습니다. 이러한 예외들은 개발자의 실수로 인해 발생할 수 있으며, 적절한 예외 처리를 통해 프로그램의 안정성을 높일 수 있습니다.

런타임 예외를 처리하기 위해서는 try-catch 블록을 사용하여 예외를 잡고 적절히 처리해야 합니다. 아래는 자바에서의 런타임 예외를 처리하는 예제 코드입니다.


public class RuntimeExcepExample {
    public static void main(String[] args) {
        try {
            String str = null;
            System.out.println(str.length()); // NullPointerException 발생
        } catch (NullPointerException e) {
            System.out.println("NullPointerException이 발생했습니다.");
        }
    }
}

위 예제 코드에서는 NullPointerException이 발생하는 상황을 예측하여 try-catch 블록을 사용하여 해당 예외를 처리하고 있습니다. 이렇게 예외를 적절히 처리함으로써 프로그램이 비정상적으로 종료되는 상황을 방지할 수 있습니다.

프로그램언어 자바(Java)의 널 포인터 예외

자바(Java) 프로그래밍 언어에서 널 포인터 예외(NullPointerException)는 많은 프로그래머들이 마주치는 일반적인 오류 중 하나입니다. 이 예외는 프로그램이 실행되는 동안 발생할 수 있으며, 주로 참조 변수가 null 값을 가리킬 때 발생합니다. 널 포인터 예외는 프로그램의 실행을 중단시키고 예외를 발생시키므로, 이를 방지하기 위해 적절한 예외 처리가 필요합니다.

널 포인터 예외를 이해하기 위해 예제 코드를 살펴보겠습니다. 아래의 예제는 널 포인터 예외가 발생하는 상황을 보여줍니다.


public class NullPointerExceptionExample {
    public static void main(String[] args) {
        String str = null;
        int length = str.length(); // NullPointerException 발생
    }
}

위의 예제 코드에서는 문자열 변수 ‘str’을 null로 초기화한 후, 해당 변수의 length() 메소드를 호출하고 있습니다. 이때 ‘str’이 null을 가리키고 있기 때문에 length() 메소드를 호출할 수 없어 널 포인터 예외가 발생하게 됩니다.

널 포인터 예외를 방지하기 위해서는 변수를 사용하기 전에 null 여부를 확인하는 등의 예외 처리를 수행해야 합니다. 예를 들어 위의 예제 코드를 수정하여 널 포인터 예외를 방지할 수 있습니다.


public class NullPointerExceptionExample {
    public static void main(String[] args) {
        String str = null;
        if (str != null) {
            int length = str.length(); // 널 포인터 예외 방지
        } else {
            System.out.println("문자열이 null입니다.");
        }
    }
}

위의 수정된 코드에서는 ‘str’이 null인지 먼저 확인한 후에 length() 메소드를 호출하고 있습니다. 이렇게 하면 프로그램이 예외를 발생시키지 않고 적절히 처리할 수 있습니다.

Leave a Comment