예외 처리

 

예외(Exception)는 프로그램 실행 중에 발생하는 비정상적인 상황을 나타냅니다. Java에서는 예외 처리 메커니즘을 제공하여 예외 상황을 효과적으로 처리할 수 있습니다.

1. 예외 클래스 계층 구조

Java의 예외 클래스는 Throwable 클래스를 상속받습니다. ThrowableExceptionError의 두 가지 하위 클래스로 나뉩니다.

  • Exception: 프로그램 실행 중 발생할 수 있는 예외 상황을 나타냅니다. 예외는 처리되지 않으면 프로그램이 비정상 종료될 수 있습니다.
  • Error: 일반적으로 프로그램에서 복구할 수 없는 심각한 오류를 나타냅니다. 예를 들어, OutOfMemoryErrorStackOverflowError가 있습니다.

2. 예외 처리 구문

Java에서는 try, catch, finally 키워드를 사용하여 예외를 처리합니다.

예제 코드

1
2
3
4
5
6
7
8
9
try {
    // 예외가 발생할 수 있는 코드
catch (ExceptionType1 e1) {
    // ExceptionType1 예외를 처리하는 코드
catch (ExceptionType2 e2) {
    // ExceptionType2 예외를 처리하는 코드
finally {
    // 예외 발생 여부와 관계없이 항상 실행되는 코드
}
cs

3. 예외 던지기(Throwing Exceptions)

메소드 내부에서 예외가 발생했을 때, throw 키워드를 사용하여 예외를 던질 수 있습니다. 예외를 던지면 해당 예외를 처리할 수 있는 적절한 catch 블록을 찾을 때까지 메소드 호출 스택을 거슬러 올라갑니다.

예제 코드

1
2
3
4
5
6
7
public void divide(int a, int b) throws ArithmeticException {
    if (b == 0) {
        throw new ArithmeticException(“Cannot divide by zero.”);
    }
    int result = a / b;
    System.out.println(“Result: “ + result);
}
cs

4. 예외 선언(Declaring Exceptions)

메소드에서 처리하지 않은 예외를 호출자에게 전파하려면 메소드 선언부에 throws 키워드를 사용하여 예외를 선언해야 합니다. 이를 통해 메소드를 호출하는 코드에서 해당 예외를 처리하거나 다시 던질 수 있습니다.

예제 코드

1
2
3
4
5
public void readFile(String fileName) throws FileNotFoundException {
    File file = new File(fileName);
    Scanner scanner = new Scanner(file);
    // …
}
cs

5. 사용자 정의 예외(Custom Exceptions)

Java에서는 기존 예외 클래스를 상속받아 사용자 정의 예외를 만들 수 있습니다. 이를 통해 애플리케이션 특정 예외를 정의하고 처리할 수 있습니다.

예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
public class InsufficientFundsException extends Exception {
    public InsufficientFundsException(String message) {
        super(message);
    }
}
public void withdraw(double amount) throws InsufficientFundsException {
    if (balance < amount) {
        throw new InsufficientFundsException(“잔액이 부족합니다.”);
    }
    balance = amount;
}
cs

6. 예외 처리 모범 사례

  • 예외 처리는 가능한 한 구체적으로 해야 합니다. 광범위한 예외를 처리하기보다는 특정 예외를 처리하는 것이 좋습니다.
  • 예외 메시지는 명확하고 이해하기 쉬워야 합니다. 예외 메시지를 통해 문제의 원인을 파악할 수 있어야 합니다.
  • 예외를 무시하거나 빈 catch 블록을 사용하지 마세요. 예외를 적절히 처리하거나 로깅하여 문제를 추적할 수 있도록 해야 합니다.
  • 예외 처리 후에는 프로그램 상태를 일관되게 유지해야 합니다. 예외 발생 이전의 상태로 되돌리거나 적절한 대체 동작을 수행해야 합니다.
  • 예외 처리 시 리소스 누수가 발생하지 않도록 주의해야 합니다. finally 블록을 사용하여 리소스를 확실히 해제하세요.

예외 처리는 Java 프로그래밍에서 매우 중요한 부분입니다. 적절한 예외 처리를 통해 프로그램의 안정성과 신뢰성을 높일 수 있습니다. 예외를 효과적으로 처리하고, 예외 정보를 활용하여 문제를 진단하고 해결하는 것이 중요합니다.

관련사이트

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다