예외(Exception)는 프로그램 실행 중에 발생하는 비정상적인 상황을 나타냅니다. Java에서는 예외 처리 메커니즘을 제공하여 예외 상황을 효과적으로 처리할 수 있습니다.
1. 예외 클래스 계층 구조
Java의 예외 클래스는 Throwable
클래스를 상속받습니다. Throwable
은 Exception
과 Error
의 두 가지 하위 클래스로 나뉩니다.
Exception
: 프로그램 실행 중 발생할 수 있는 예외 상황을 나타냅니다. 예외는 처리되지 않으면 프로그램이 비정상 종료될 수 있습니다.Error
: 일반적으로 프로그램에서 복구할 수 없는 심각한 오류를 나타냅니다. 예를 들어,OutOfMemoryError
나StackOverflowError
가 있습니다.
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 프로그래밍에서 매우 중요한 부분입니다. 적절한 예외 처리를 통해 프로그램의 안정성과 신뢰성을 높일 수 있습니다. 예외를 효과적으로 처리하고, 예외 정보를 활용하여 문제를 진단하고 해결하는 것이 중요합니다.
관련사이트
- Oracle Java Tutorials – Exceptions
- Baeldung – Exception Handling in Java
- GeeksforGeeks – Exception Handling in Java