JAVA

예외처리(Exception)

jki09871 2024. 7. 24. 15:00

1. 예외처리란 무엇인가?

예외는 프로그램 실행 중에 발생할 수 있는 오류를 의미합니다. 예외가 발생하면 프로그램이 비정상적으로 종료될 수 있으므로, 예외를 적절히 처리하는 것이 중요합니다. 자바에서는 예외를 처리하여 프로그램이 계속 실행되도록 할 수 있습니다.

2. 자바의 예외 클래스 구조

자바에서는 예외를 처리하기 위해 Throwable 클래스를 사용합니다. Throwable 클래스는 두 가지 주요 하위 클래스를 가지고 있습니다:

  • Exception: 주로 프로그램에서 발생하는 예외를 처리합니다.
  • Error: 주로 JVM의 오류를 나타내며, 일반적으로 프로그램에서 처리하지 않습니다.

3. 예외처리 구문

try-catch 블록

예외처리는 try 블록 안에서 예외가 발생할 수 있는 코드를 작성하고, catch 블록에서 그 예외를 처리하는 방식으로 이루어집니다.

try {
    // 예외가 발생할 수 있는 코드
} catch (Exception e) {
    // 예외가 발생했을 때 처리할 코드
}

finally 블록

finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 블록입니다. 주로 자원을 해제하는 데 사용됩니다.

try {
    // 예외가 발생할 수 있는 코드
} catch (Exception e) {
    // 예외가 발생했을 때 처리할 코드
} finally {
    // 항상 실행되는 코드
}

4. 예외 발생시키기

프로그램에서 명시적으로 예외를 발생시키려면 throw 키워드를 사용합니다.

if (condition) {
    throw new Exception("예외 메시지");
}

 

또한, 메서드가 예외를 던질 수 있음을 선언하려면 throws 키워드를 사용합니다.

public void myMethod() throws Exception {
    // 코드
}

5. 자주 사용되는 예외 클래스

자바에서 자주 사용되는 몇 가지 예외 클래스를 소개합니다:

  • IOException: 입출력 작업에서 발생하는 예외
  • SQLException: 데이터베이스 작업 중 발생하는 예외
  • NullPointerException: null 참조에 접근하려 할 때 발생하는 예외
  • IllegalArgumentException: 부적절한 인자가 전달될 때 발생하는 예외

6. 사용자 정의 예외

특정 도메인에 맞는 예외를 정의하여 더 명확한 예외 처리를 가능하게 할 수 있습니다. 이를 위해 사용자 정의 예외 클래스를 만들 수 있습니다.

public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}
 

간단한 자바 예외처리 예제

숫자 나누기 예제

사용자로부터 두 개의 숫자를 입력받아 나누기를 수행하고, 나눗셈 과정에서 발생할 수 있는 예외를 처리하는 간단한 예제입니다.

import java.util.Scanner;

public class DivisionExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        try {
            System.out.print("첫 번째 숫자를 입력하세요: ");
            int num1 = scanner.nextInt();
            
            System.out.print("두 번째 숫자를 입력하세요: ");
            int num2 = scanner.nextInt();
            
            int result = num1 / num2;
            System.out.println("결과: " + result);
        } catch (ArithmeticException e) {
            System.out.println("0으로 나눌 수 없습니다.");
        } catch (Exception e) {
            System.out.println("잘못된 입력입니다.");
        } finally {
            scanner.close();
            System.out.println("프로그램을 종료합니다.");
        }
    }
}

예제 코드 설명

  • Scanner 사용: 사용자로부터 입력을 받기 위해 Scanner 객체를 사용합니다.
  • try 블록: 숫자를 입력받고 나눗셈을 수행하는 코드가 포함되어 있습니다. 예외가 발생할 수 있는 코드를 try 블록 안에 넣습니다.
  • catch 블록: 두 가지 예외를 처리합니다.
    • ArithmeticException: 0으로 나누는 경우 발생합니다.
    • Exception: 기타 모든 예외를 처리합니다. 여기서는 주로 잘못된 입력을 처리합니다.
  • finally 블록: Scanner 객체를 닫고, 프로그램 종료 메시지를 출력합니다.

추가 예제: 배열 요소 접근

배열의 요소를 접근하는 과정에서 발생할 수 있는 예외를 처리하는 예제입니다.

public class ArrayExample {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        
        try {
            System.out.println("배열의 여섯 번째 요소: " + numbers[5]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("잘못된 인덱스 접근입니다. 배열의 크기를 확인하세요.");
        }
        
        System.out.println("프로그램을 종료합니다.");
    }
}

예제 코드 설명

  • 배열 사용: numbers라는 정수 배열을 정의하고 초기화합니다.
  • try 블록: 배열의 여섯 번째 요소에 접근하는 코드가 포함되어 있습니다.
  • catch 블록: ArrayIndexOutOfBoundsException을 처리하여 잘못된 인덱스 접근 시 경고 메시지를 출력합니다.