들어가며
✍️ Keywords
: Java는 외부 리소스와 관련된 예외는 강제적으로 처리하여 안정성을 높이고, 프로그래머의 실수나 논리적 오류는 강제하지 않음으로써 유연성을 제공합니다.
Checked Exception (검사 예외), Unchecked Exception (비검사 예외), Error
구분 | 상세 내용 |
Checked Exception | 검사 예외, 컴파일러가 예외 처리를 강제로 하는 예외 외부 자원과 관련된 예외들이 많습니다. (ex: IOException, SQLException) |
Unchecked Exception | 비검사 예외, 주로 프로그래머의 실수로 발생하는 예외 컴파일러가 예외 처리를 강제하지 않습니다. (ex: NullPointerException, ArithmeticException) |
Error | 시스템 레벨의 심각한 문제, try-catch로 처리할 필요가 있습니다. (ex: OutOfMemoryError, StackOverflowError) |
✏️ 예외 계층 구조
ℹ️ Java의 예외 계층은 최상위 클래스와 그 하위 클래스들로 이루어져 있습니다.
- Object: 모든 클래스의 최상위 클래스입니다.
- Throwable: 예외와 오류를 포함하는 최상위 클래스입니다. 모든 예외 및 오류 클래스는 Throwable을 상속받습니다.
- Exception: Throwable의 하위 클래스이며, 프로그램에서 예외적인 상황을 나타냅니다. Exception은 다시 두 가지로 나눌 수 있습니다.
- Checked Exception, Unchecked Exception
- Error: Throwable의 또 다른 하위 클래스입니다. 주로 시스템 레벨의 심각한 문제를 나타내며, 개발자가 직접 처리할 수 없는 경우가 많습니다.
✅ 검사 예외 (Checked Exception)
- 컴파일 타임 예외
- Java 컴파일러는 이 예외를 반드시 처리하도록 강제합니다.
- 프로그램이 실행 중에 예측 가능한 외부 자원과 관련된 예외이며, 보통 파일 입출력이나 데이터베이스 접근 같은 작업에서 발생합니다.
- 특징
- 컴파일 타임에 예외 처리를 요구합니다.
- IOException, SQLException과 같은 예외는 반드시 try-catch 구문으로 처리하거나, 메서드 선언에 throws 키워드로 선언해야 합니다.
검사 예외 종류 | 설명 |
IOException | 파일이나 네트워크 입출력 중 발생할 수 있는 예외입니다. |
SQLException | 데이터베이스와 상호작용할 때 발생할 수 있는 예외입니다. |
- 정리
- 이러한 예외들은 시스템 외부의 리소스 상태에 따라 발생할 가능성이 있습니다.
- Java는 개발자가 반드시 이 예외를 처리하거나 throws로 던지도록 강제하여 프로그램의 안정성을 높이려고 합니다.
✅ 비검사 예외 (Unchecked Exception)
- 런타임 예외
- 컴파일러가 처리 여부를 검사하지 않기 때문에 try-catch로 강제적으로 처리할 필요가 없습니다.
- 주로 프로그래머의 실수나 코드의 논리적 오류로 인해 발생할 수 있습니다.
- 특징
- 컴파일 타임이 아닌 런타임에 발생합니다.
- Java는 이러한 예외에 대해 명시적인 예외 처리를 강제하지 않습니다.
비검사 예외 종류 | 설명 |
NullPointerException | 널 객체에 접근하려 할 때 발생하는 예외입니다. |
ArithmeticException | 0으로 나누는 것과 같은 잘못된 산술 연산을 수행할 때 발생합니다. |
- 정리
- 비검사 예외는 대부분의 경우 개발자가 직접 코드를 수정하여 해결할 수 있는 문제이기 때문에, 강제적인 예외 처리를 요구하지 않습니다.
✅ 오류 (Error)
- 심각한 시스템 레벨의 문제
- 주로 JVM의 상태나 메모리 부족과 관련된 예외입니다.
- 일반적으로 개발자가 이 예외를 처리하려고 시도하지 않습니다.
- 특징
- 비검사 예외처럼 try-catch로 강제하지 않습니다.
- 예시:
- OutOfMemoryError: 메모리가 부족할 때 발생하는 오류입니다.
- StackOverflowError: 재귀 호출이 너무 깊어져서 스택 메모리가 초과될 때 발생합니다.
정리하면
- Unchecked Exception: 코드에서 발생할 수 있는 프로그래머의 실수나 로직 오류와 관련된 예외라서 강제적 예외 처리가 필요 없다고 봅니다.
- Checked Exception: 외부 자원이나 예상 가능한 오류 상황에서 발생할 수 있으므로 반드시 예외 처리 방법을 정의하도록 강제하여 애플리케이션 안정성을 높입니다.
- Error: 시스템 레벨의 심각한 문제로, try-catch로 처리할 필요가 없습니다.
- 참고자료
[JAVA] 검사예외와 비검사예외
JAVA의 예외 처리는 모두 Throwable을 상속하고 있고 크게 Exception과 Error로 나뉜다. Exception은 검사 예외이고, Error는 비검사 예외이다.개발자가 명시해야 하는 부분은 검사 예외인 Exception으로 어플리
velog.io
반응형