프로그램을 만들다 보면 예상치 못한 실수나 상황으로 인해 프로그램이 갑자기 멈추는 일이 발생하곤 합니다.
자바에서는 이런 상황을 **'예외(Exception)'**라고 부르며, 이를 체계적으로 관리할 수 있는 도구들을 제공합니다.
📘 자바 예외: "프로그램의 비상상황 관리"
1. Exception class (모든 예외의 조상)
- 설명: 자바에서 발생하는 모든 예외 사건들의 최상위 부모 클래스입니다.
- 비유: 모든 종류의 사고 보고서를 담는 '사고 관리 대장'과 같습니다.
- 특징: 프로그램 실행 중에 발생할 수 있는 가벼운 문제부터 심각한 문제까지 모든 예외 객체는 이 클래스를 상속받습니다.
2. General Exception (일반 예외 / Checked Exception)
- 설명: 컴파일 시점에서 자바가 "이 부분은 위험해 보여!"라고 미리 경고해주는 예외입니다.
- 비유: "공사 현장에 들어갈 땐 반드시 헬멧을 써야 한다"는 규칙과 같습니다.
- 특징: 코드를 작성할 때 반드시 try-catch로 감싸거나 밖으로 던져야(throws) 하며, 그렇지 않으면 컴파일 자체가 되지 않습니다. (예: 존재하지 않는 파일 읽기, 네트워크 연결 오류 등)
Java
import java.io.FileReader;
import java.io.IOException;
public class GeneralExceptionExample {
public static void main(String[] args) {
try {
// 파일을 읽는 행위는 위험하므로 반드시 예외 처리가 필요합니다. (General Exception)
FileReader fr = new FileReader("none.txt");
} catch (IOException e) {
System.out.println("일반 예외 발생: 파일을 찾을 수 없습니다.");
}
}
}
3. Runtime Exception (실행 예외 / Unchecked Exception)
- 설명: 컴파일은 잘 되지만, 프로그램이 돌아가는 도중에 개발자의 실수로 발생하는 예외입니다.
- 비유: "길을 걷다 발이 꼬여서 넘어지는 것"과 같습니다. 미리 예측하기 어렵지만 충분히 주의하면 막을 수 있습니다.
- 특징: 컴파일러가 강제하지 않기 때문에 개발자가 코드를 꼼꼼히 짜서 방지해야 합니다. (예: 0으로 나누기, 배열 인덱스 초과, 빈 객체 참조 등)
Java
public class RuntimeExceptionExample {
public static void main(String[] args) {
String str = null;
try {
// null인 객체의 메서드를 부르는 것은 개발자의 실수입니다. (Runtime Exception)
System.out.println(str.length());
} catch (NullPointerException e) {
System.out.println("실행 예외 발생: 객체가 비어있습니다(null).");
}
}
}
👨🏫 쉽게 이해하는 핵심 포인트
- 에러(Error) vs 예외(Exception): 에러는 메모리 부족처럼 프로그램이 스스로 고칠 수 없는 심각한 상태이고, 예외는 코드 수정을 통해 우리가 수습할 수 있는 상태입니다.
- 강제성: 일반 예외는 **"안 하면 컴파일 안 해줌"**이고, 실행 예외는 **"일단 해주는데 조심해"**라고 이해하시면 명확합니다.
- 처리 방법: 예외가 발생하면 try { ... } 안의 코드가 멈추고 즉시 catch { ... } 블록으로 이동하여 프로그램이 죽지 않도록 방어해줍니다.
오늘의 요약
- Exception: 프로그램 사고를 관리하는 클래스들의 부모.
- General Exception: 파일, 네트워크 등 외부 요인에 의해 발생하며 예외 처리가 필수임.
- Runtime Exception: 개발자의 논리적 실수에 의해 발생하며 예외 처리가 선택임.
자바의 안전장치인 예외 처리의 개념을 완벽히 잡으셨네요!

'JAVA' 카테고리의 다른 글
| JAVA Statement and semicolon (0) | 2026.02.14 |
|---|---|
| JAVA Default code analysis (0) | 2026.02.04 |
| Promotion (0) | 2025.10.20 |
| Inheritance (0) | 2025.10.09 |
| Exception handing (0) | 2025.10.08 |