Throwable
- 예외와 관련된 최상위 클래스
- 대부분 직접적으로 이 클래스를 사용하기보다는 이를 상속받은 Exception이나 Error가 주로 사용됨
- Error는 예외 처리의 대상으로 보지 않기에 제외하면 나머지 Exception 클래스와 그 하위 클래스가 주요 처리 대상임
- 예외가 연결될 때(Chained Exception) 연결된 예외의 정보들을 기록하기도 함
- 이 Throwable 객체가 지닌 정보와 할 수 있는 행위는 getMessage(), printStackTrace()라는 메소드로 구현
- getMessage() : 발생한 예외에 대한 구체적인 메시지를 반환하므로 간단히 예외에 관한 내용을 확인할 때 사용
- printStackTrace() : 예외에 대한 자세한 디버깅을 위해 주로 사용되는 메소드
Exception
- RuntimeException 계열과 그 외의 Exception 계열로 나윔
- 두 계열의 차이는 컴파일 시점에 예외 상황에 대한 대비 코드(try ~ catch)가 있는지를 체크하는지 여부에 있음
-> 각각 Unchecked Exception과 CheckedException으로 불림
- RuntimeException의 하위 클래스들은 모두 Unchecked Exception으로 예외에 대한 처리 코드가 없어도 컴파일 오류가 발생하지 않음
- 대비 코드를 작성하지 않은 상태에서 예외가 발생하면 프로그램은 비정상 종료됨
- Checked Exception의 경우 예외에 대한 처리 코드가 없을 경우 컴파일 오류가 발생하므로 반드시 작성해야 함
Error(오류)
- 메모리가 부족하거나 메서드끼리 호출을 무한 반복하는 것처럼 일단 발생하면 복구하거나 되돌릴 수 없는 심각한 상황
- 개발자가 미리 예측하여 방치할 수 없음
- 처리 방법은 오류를 발생하는 요인을 찾아서 없애는 디버깅만 있음
-> 프로그램을 잘 짜는 것이 대안
- stackOverFlowError
- 호출의 깊이가 깊어지거나 재귀가 지속되어 stack overflow 발생시 던져지는 오류
- 재귀를 사용할 때에 조심하거나 가시적인 loop를 사용하는 간접적인 예방이 가능
- outOfMemoryError
- JVM이 할당된 메모리의 부족으로 더 이상 객체를 할당할 수 없을 때 던져지는 오류
- Garbage Collector에 의해 추가적인 메모리가 확보되지 못하는 상황임
- 새는 메모리를 차단하거나 heap의 크기를 늘려주면서 이를 방지할 수 있음
Exception(예외)
- 오류와 비교하면 심각도가 낮으며 프로그램의 정상적인 흐름을 방해하는 상황
- 개발자가 구현한 로직에서 발생한 실수 혹은 사용자의 영향에 의해 발생
- EX) 파일을 읽으려 할 때 해당 파일이 존재하지 않음, 네트워크 연결이 끊기는 상황
- 이러한 상황들은 개발자가 미리 예측하여 방지할 수 있기 때문에 상황에 맞는 예외 처리(Exception Handle)를 해야 함
- NullPointerException
- 객체가 필요한 경우인데 응용 프로그램이 null을 사용하려고 시도할 경우 던져지는 / 던져질 수 있는 예외
- IllegalArgumentException
- 메서드가 허가되지 않거나 부적절한 argument를 받았을 경우 던져지는 / 던져질 수 있는 예외
- Checked Exception
- 컴파일 시점에 예외를 catch하는지 정적으로 확인
- 만일 컴파일 시점에 예외에 대해 처리(try ~ catch)하지 않는다면 컴파일 에러가 발생
- Unchecked Exception
- 컴파일 시점에 예외를 catch하는지 확인하지 않음
- 그렇기에 컴파일 시점에 예외가 발생하는지 여부를 확인할 수 없음
- 예외 가능성이 있는 메서드를 호출하는 메서드가 예외를 활용하여 의미있는 작업을 할 수 있다면 Checked Exception을 활용할 수 있음
- 호출하는 메서드가 예외 상황이나 문제 해결 능력이 없다면 Unchecked Exception을 활용할 수 있음
- Checked Exception을 처리하기 위해서는 throws를 사용하여 피호출 메서드에서 호출하는 메서드로 예외를 던질 수 있음
-> 무분별하게 사용하면 코드의 가독성을 떨어뜨리고 예외 발생 지점을 알 수 없게 됨
'JAVA' 카테고리의 다른 글
13. 자바 8의 특징 (1) | 2025.04.17 |
---|---|
12. 비동기처리 문법 비교 (0) | 2025.04.17 |
10. Error & Exception 1 (0) | 2025.04.16 |
9. Auto Boxing & UnBoxing (0) | 2025.03.28 |
8. Mutable & Immutable (0) | 2025.03.28 |