1. 예외(Exception)란 무엇인가
예외란 프로그램 실행 중 발생하는, 정상적인 흐름을 방해하는 상황이다
- 예외는 컴파일 오류가 아니다
- 예외는 런타임 중 발생
- 예외는 예측 가능하며, 통제 대상이다
int result = 10;
컴파일은 정상, 실행 시 오류 발생, 프로그램이 즉시 종료되므로 예외처리가 없으면 프로그램은 복구 기회 없이 종료된다.
2. 예외 처리가 필요한 이유
- 프로그램 강제 종류 방지 : 일부 기능 실패가 전체 시스템 실패는 아니기에 흐름을 제어 가능
- 오류 원인 명확화 : 단순 조건보다 의미가 명확하고, 원인 추적이 가능하다
- 책임 분리 : 오류 발생과 오류 처리를 분리해 가독성이 향ㅅㅇ됨
예외는 실패가 아닌 의도를 가진 신호라고 볼 수 있다
3. 자바의 예외 계층 구조

Errors
- JVM 레벨의 치명적인 문제
- 개발자가 처리하지 않음
- ex) OutOfMemoryError
- StackOverflowError
Exceptions
- 애플리캐이션에서 처리 가능한 문제
- 우리가 다루는 예외의 대부분
4. Check Exception
컴파일 타임에 처리여부를 강제하는 예외이다. try-catch 또는 throws가 필수이다.
FileInputStream fis = new FileInputStream("test.txt");
대표적인 Checked 예외
- IOException
- SQLException
- FileNotFoundException
외부 자원(IO, DB, 네트워크)과 관련되어 있고, 개발자가 사전에 예측 가능한 실패들이다!!
장점
- 안정성 증가
- 예외 처리 누락 방지
단점
- 코드 복잡도 증가
- 불필요한 예외 전파 발생 가능
5. Unchecked Exception
런타임에 발생하는 에러이고 컴파일러가 처리 강제하지 않는다.
int value = list.get(10); // IndexOutOfBoundsException
대표적인 Uncheck
- NullPointerException
- IllegalArgumentException
- IndexOutOfBoundsException
- ArithmeticException
6. Checked vs Unchecked
| 구분 | Checked Exception | Unchecked Exception |
| 발생 시점 | 컴파일 타임 | 런타임 |
| 처리 강제 | O | X |
| 상속 | Exception | RuntimeException |
| 용도 | 외부 환경 문제 | 로직 오류 |
| 대표 예시 | IOException | NullPointerException |
7. 정리
- 예외는 오류가 아니라 제어 가능한 흐름
- 모든 예외를 잡는 것이 정답은 아니다
- 예외 종류 구분이 설계의 출발점
'Java & Spring > Java' 카테고리의 다른 글
| 예외 처리 문법 (0) | 2026.01.07 |
|---|---|
| Enum의 개념과 사용 (0) | 2026.01.07 |
| 내부 클래스(Inner Class) (0) | 2026.01.07 |
| 추상화 (0) | 2026.01.07 |
| SOLID 원칙 (0) | 2026.01.06 |