반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- junit5
- list
- 인텔리제이
- javascript
- junit
- java테스트
- 자바문법
- html
- json
- js
- 자바
- IntelliJ
- Java
- vscode
- ArrayList
- 자바스크립트
- CSS
- Array
- 단위테스트
- 문자열
- input
- Visual Studio Code
- 배열
- 이클립스
- HashMap
- Eclipse
- string
- 테스트자동화
- math
- 정규식
Archives
- Today
- Total
어제 오늘 내일
[Java] 예외(Exception)와 오류(Error) 차이 본문
Java에서 예외(Exception)와 오류(Error)는 모두 프로그램 실행 중 발생하는 문제를 표현하지만,
두 개념은 원인·처리 가능 여부·목적이 완전히 다릅니다.
예외는 개발자가 적절히 처리할 수 있지만, 오류는 시스템적 문제로 처리하기 거의 불가능합니다.
1. 예외(Exception)란?
예외는 프로그램 실행 중 발생할 수 있는 문제 상황으로,
개발자가 코드로 예측하고 처리할 수 있는 오류입니다.
예:
- 파일이 존재하지 않음
- 배열 인덱스 범위 초과
- null 접근
- 네트워크 연결 실패
예외는 적절하게 try-catch로 처리할 수 있습니다.
예제
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
}
특징
- 개발자가 처리 가능
- 예측 가능한 문제
- Exception 클래스 계층에 포함
2. 오류(Error)란?
오류는 JVM 실행 자체에 문제가 생겨 발생하는 심각한 시스템 오류로,
개발자가 처리할 수 없는 경우가 대부분입니다.
예:
- OutOfMemoryError (메모리 부족)
- StackOverflowError (재귀 호출 과다)
- VirtualMachineError (JVM 문제)
오류는 시스템 수준 문제이므로 try-catch로 해결할 수 없습니다.
예제
public class Test {
public static void main(String[] args) {
recurse(); // 무한 재귀 호출
}
static void recurse() {
recurse();
}
}
출력 예:
Exception in thread "main" java.lang.StackOverflowError
특징
- 개발자가 직접 해결 불가
- JVM 또는 시스템 문제
- Error 클래스 계층에 포함
3. Exception과 Error의 계층 구조
Throwable
├── Exception → 처리 가능(try-catch)
│ ├── Checked Exception
│ └── Unchecked Exception(RuntimeException)
└── Error → 시스템 오류, 처리 불가
✔ Exception
프로그램 흐름을 제어하기 위해 사용될 수 있는 "예측 가능한 문제"
✔ Error
JVM이 더 이상 정상 실행하기 어려운 문제 → 복구 불가
4. Checked Exception vs Unchecked Exception
Exception 내부에서도 두 가지로 나뉩니다.
✔ Checked Exception (컴파일 시점 체크)
- 반드시 처리해야 함
예: IOException, SQLException
try {
Thread.sleep(1000);
} catch (InterruptedException e) { }
✔ Unchecked Exception (RuntimeException 계열)
- 코드 실수로 발생
예: NullPointerException, IndexOutOfBoundsException
String s = null;
s.length(); // NullPointerException
5. 예외 vs 오류 비교 정리
| 구분 | 예외(Exception) | 오류(Error) |
| 발생 원인 | 개발 중 예측 가능한 문제 | JVM, 하드웨어 등 시스템 문제 |
| 처리 가능 여부 | 처리 가능 (try-catch) | 처리 어려움, 복구 불가 |
| 대표 클래스 | Exception, RuntimeException | OutOfMemoryError, StackOverflowError |
| 목적 | 안정적 프로그램 흐름 유지 | 시스템 경고, 비정상 종료 방지 불가 |
- 예외는 처리, 오류는 회피 대상
6. 요약
- Exception: 개발자가 예측하고 처리 가능한 문제
- Error: 시스템 문제로 처리가 어렵고 복구 불가
- Exception은 프로그램 흐름을 안전하게 유지하기 위한 장치
- Error는 발생하면 프로그램이 정상 동작하기 어려운 심각한 상황🔖 태그
반응형
'IT > Java' 카테고리의 다른 글
| [Java] throw vs throws 차이 (0) | 2026.01.01 |
|---|---|
| [Java] try-catch-finally 사용법 (0) | 2026.01.01 |
| [Java] 제네릭(Generic) 기본 개념과 예제 (0) | 2025.12.31 |
| [Java] 패키지(package)와 import 구조 이해 (0) | 2025.12.30 |
| [Java] enum 사용법 및 실전 예제 (0) | 2025.12.30 |
Comments
