사고가 났을 때 어떻게 수습하고 대처하는지 그 구체적인 방법들을 배워보겠습니다.
자바의 예외 처리(Exception Handling) 시스템은 사고를 처리하는 매뉴얼과 같습니다.
📘 예외 처리의 3가지 핵심 기술
1. Try-catch-finally block (기본 수습 과정)
- 설명: 예외가 발생할 가능성이 있는 코드를 감시하고, 사고 발생 시 뒷수습을 한 뒤, 마지막 정리까지 하는 가장 표준적인 방법입니다.
- 비유: 사고가 나면 보험사에 연락(try-catch)하고, 차 수리가 끝나면 렌터카를 반납(finally)하는 과정과 같습니다.
Java
public class TryCatchFinallyExample {
public static void main(String[] args) {
try {
// 1. 위험한 코드 실행
int result = 10 / 0;
System.out.println("결과: " + result);
} catch (ArithmeticException e) {
// 2. 사고 발생 시 수습 (예외 메시지 출력 등)
System.out.println("사고 발생: 0으로 나눌 수 없습니다.");
} finally {
// 3. 예외 발생 여부와 상관없이 무조건 실행 (자원 정리)
System.out.println("마지막 정리 작업을 수행합니다.");
}
}
}
2. Multiple catch block (다중 수습 센터)
- 설명: 발생할 수 있는 사고의 종류가 여러 개일 때, 사고별로 다른 대책을 세우는 방법입니다.
- 비유: 불이 나면 소방서에, 아프면 병원에 연락하는 것처럼 사고 타입에 맞춰 전문가를 부르는 것입니다.
- 주의: 상위 클래스(Exception)일수록 아래쪽에 배치해야 합니다. (작은 사고부터 큰 사고 순으로 처리)
Java
public class MultipleCatchExample {
public static void main(String[] args) {
try {
String str = null;
System.out.println(str.length()); // NullPointerException 발생 가능
int[] arr = new int[2];
arr[5] = 10; // ArrayIndexOutOfBoundsException 발생 가능
} catch (NullPointerException e) {
System.out.println("객체가 비어있습니다.");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열 범위를 벗어났습니다.");
} catch (Exception e) {
System.out.println("기타 알 수 없는 사고가 발생했습니다.");
}
}
}
3. Throws keyword (예외 미루기 / 폭탄 돌리기)
- 설명: 내가 직접 사고를 수습하지 않고, 나를 호출한 상위 메서드에게 예외 처리를 떠넘기는 방법입니다.
- 비유: 현장 직원이 사고를 처리하기 힘들어 상사에게 "이런 문제가 생겼으니 보고드립니다!"라고 보고서를 올리는 것과 같습니다.
Java
public class ThrowsExample {
public static void main(String[] args) {
try {
// 미뤄둔 숙제를 여기서 처리합니다.
findClass();
} catch (ClassNotFoundException e) {
System.out.println("클래스를 찾을 수 없습니다: " + e.getMessage());
}
}
// throws: "이 메서드는 이런 예외가 날 수 있으니 나를 부르는 쪽에서 대비해!"
public static void findClass() throws ClassNotFoundException {
Class cls = Class.forName("java.lang.String22");
}
}
👨🏫 쉽게 이해하는 핵심 포인트
- finally의 위력: try나 catch 블록 안에서 return을 만나더라도, finally 블록은 프로그램이 끝나기 전에 반드시 실행됩니다. 파일을 닫거나 연결을 끊을 때 필수입니다.
- 다중 catch의 순서: 만약 맨 위에 catch (Exception e)를 두면 모든 예외가 거기서 걸려버려, 아래에 적은 세부적인 예외 처리 코드(NullPointerException 등)는 실행되지 않습니다.
- throw vs throws: throw는 내가 예외를 강제로 발생시키는 것이고, throws는 예외가 날 수 있음을 **공표(미룸)**하는 것입니다.
오늘의 요약
- try-catch-finally: 직접 사고를 수습하고 마무리까지 책임진다.
- Multiple catch: 다양한 사고 유형에 맞춰 맞춤 대책을 세운다.
- throws: 내가 직접 처리하지 않고 나를 호출한 곳으로 보고한다.
이제 예외가 발생해도 당황하지 않고 대처할 수 있는 든든한 방어 기법들을 모두 배우셨습니다!

'JAVA' 카테고리의 다른 글
| Promotion (0) | 2025.10.20 |
|---|---|
| Inheritance (0) | 2025.10.09 |
| JAVA Comments (2) | 2025.08.27 |
| JVM (0) | 2025.08.27 |
| Getter Setter (0) | 2025.08.25 |