예외 처리는 프로그램에서 발생할 수 있는 오류 상황을 처리하는 방법이다.
자바의 예외 처리는 주로 try, catch, finally 블록을 사용하여 구현된다. 또한 사용자 정의 예외를 만들어 특정 상황에 맞게 사용할 수도 있다.
1. 자바 예외 처리 클래스 계층 구조
자바의 예외 처리 클래스는 Throwable 클래스를 루트로 하여 계층 구조를 이룬다.
- Throwable: 모든 예외의 루트 클래스.
- Error: 시스템 레벨에서 발생하는 심각한 오류. 애플리케이션 코드에서 처리할 필요가 없음.
- Exception: 애플리케이션 코드에서 발생하는 예외의 루트 클래스.
- RuntimeException: 실행 시 발생하는 예외. 주로 프로그래밍 오류(예: NullPointerException, ArrayIndexOutOfBoundsException 등).
- 기타 Exception: 컴파일 타임 예외. 반드시 처리해야 하는 예외(예: IOException, SQLException 등).
2. 예외 처리 구문
자바에서 예외 처리는 try, catch, finally 블록을 사용하여 이루어진다.
try {
// 예외가 발생할 가능성이 있는 코드
} catch (ExceptionType1 e1) {
// 예외를 처리하는 코드
} catch (ExceptionType2 e2) {
// 다른 예외를 처리하는 코드
} finally {
// 항상 실행되는 코드 (옵션)
}
예시
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = divide(10, 0);
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.err.println("ArithmeticException caught: " + e.getMessage());
} finally {
System.out.println("Finally block executed");
}
}
public static int divide(int a, int b) {
return a / b; // 0으로 나누면 ArithmeticException 발생
}
}
3. 사용자 정의 예외
아래와 같이 특정 상황에 맞는 예외를 정의할 수 있다.
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public class CustomExceptionExample {
public static void main(String[] args) {
try {
validateAge(15);
} catch (CustomException e) {
System.err.println("CustomException caught: " + e.getMessage());
}
}
public static void validateAge(int age) throws CustomException {
if (age < 18) {
throw new CustomException("Age must be 18 or older.");
}
}
}
4. throw와 throws
throw
throw는 특정 예외를 명시적으로 발생시키는 데 사용된다.
public class ThrowExample {
public static void main(String[] args) {
try {
validateAge(15);
} catch (CustomException e) {
System.err.println("CustomException caught: " + e.getMessage());
}
}
public static void validateAge(int age) throws CustomException {
if (age < 18) {
throw new CustomException("Age must be 18 or older.");
}
}
}
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
위 코드에서 validateAge 메서드는 나이가 18보다 적으면 CustomException을 발생되는데, throw 키워드를 사용하여 예외를 명시적으로 던지는 것을 볼 수 있다.
throws
throws는 메서드 선언부에 사용되며, 해당 메서드가 특정 예외를 던질 가능성이 있음을 명시한다. 이를 통해 메서드를 호출하는 쪽에서 예외를 처리할 수 있도록 한다.
public class ThrowsExample {
public static void main(String[] args) {
try {
processFile("somefile.txt");
} catch (IOException e) {
System.err.println("IOException caught: " + e.getMessage());
}
}
public static void processFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName);
BufferedReader fileInput = new BufferedReader(file);
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
}
위 코드에서 processFile 메서드는 파일을 읽는 작업을 수행하며, IOException이 발생할 수 있음을 throws 키워드를 사용하여 선언하고 있고 이 예외는 processFile을 호출하는 메서드(main 메서드)에서 처리된다.
5. 요약
요약하자면, 자바의 예외 처리는 try, catch, finally 블록을 통해 구현되며, 필요에 따라 사용자 정의 예외를 만들 수 있다.
예외가 발생할 수 있는 메서드에 throws (exception)으로 해당 exception이 발생할 수 있다는 것을 명시해 주고 throw는 throw new (exception)으로 해당 상황에 특정 예외를 명시적으로 발생시킨다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
상속과 다형성 (0) | 2024.09.06 |
---|---|
Enum - 2 (0) | 2024.07.08 |
Static / Non-Static method (0) | 2024.01.29 |
Enum - 1 (feat. final) (0) | 2023.11.08 |
Stream (0) | 2023.11.04 |