Java의 Exception이 처리되는 순서를 설명해주세요. catch 안에 exception 이 또 발생하는 경우 어떻게 되나요?
- try 블록: 예외가 발생할 수 있는 코드를 포함하는 부분이다. 이 블록 내에서 예외가 발생하면, JVM(Java Virtual Machine)은 해당 예외 객체를 생성하고, 적절한 catch 블록을 찾기 위해 이를 던진다(throws).
- catch 블록: 특정 종류의 예외를 처리하는 코드를 포함하는 부분이다. catch 블록은 특정 예외 클래스 또는 그 하위 클래스를 처리한다. try 블록에서 발생한 예외가 catch 블록에서 선언된 예외와 일치하거나 그 하위 클래스이면, 해당 catch 블록의 코드가 실행된다. 여러 개의 catch 블록이 있을 수 있으며, 이들은 위에서 아래로 적용되어 첫 번째로 일치하는 catch 블록이 실행된다.
- finally 블록: 예외가 발생하든 발생하지 않든 반드시 실행되는 코드를 포함하는 부분이다. 이는 주로 자원 해제와 같은 클린업 작업에 사용된다.
Java 7부터는 멀티-캐치 블록이 도입되어 하나의 catch 블록에서 여러 예외를 처리할 수 있게 되었다. 이를 통해 코드의 중복을 줄이고 가독성을 향상시킬 수 있다.
예외 처리 과정은 다음과 같은 순서로 진행된다:
- try 블록 내의 코드가 실행된다.
- try 블록 내에서 예외가 발생하면, 해당 예외 객체가 생성되고 시스템에 의해 던져진다.
- 던져진 예외와 일치하는 catch 블록이 찾아진다. 일치하는 catch 블록이 없으면, 예외는 메소드 외부로 전파된다.
- 일치하는 catch 블록의 코드가 실행되어 예외를 처리한다.
- finally 블록의 코드가 실행된다. 이 코드는 예외 발생 유무와 상관없이 항상 실행된다.
이러한 방식을 통해 Java는 예외 상황을 효과적으로 관리하고, 프로그램의 안정성과 신뢰성을 보장한다.
catch 블록 내에서 예외가 발생하면, 그 예외는 일반적으로 새로운 예외로 취급되고 해당 catch 블록을 벗어나 전파된다. 이는 try 블록 내에서 발생한 원래의 예외와는 별개이다. catch 블록 내에서 발생한 이 새로운 예외를 처리하려면, 해당 catch 블록 내에 추가적인 try-catch 문을 사용하여 처리할 수 있다.
try {
// some code that might throw an exception
} catch (Exception e) {
try {
// handling code that might throw another exception
} catch (Exception innerException) {
// handle exception thrown within the catch block
}
} finally {
// cleanup code
}
위 코드에서 볼 수 있듯이, catch 블록 내의 예외는 별도의 try-catch 문으로 처리된다.
catch 블록 내에서 발생하는 예외는 주의해야 한다. 이런 상황이 발생하면, 원래의 예외는 새로운 예외에 의해 가려질 수 있다. 이로 인해 디버깅이 어려워질 수 있으므로, 가능한한 catch 블록 내에서는 예외가 발생하지 않도록 코드를 작성하는 것이 바람직하다.
'일상 > 스터디' 카테고리의 다른 글
9일차 과제 - RDB와 NoSQL은 무엇인가요? 차이점 또는 장단점 (0) | 2023.05.18 |
---|---|
9일차 과제 - 오버로딩과 오버라이딩의 차이점 (0) | 2023.05.18 |
8일차 과제 - 알고리즘에서 '시간복잡도'와 '공간복잡도'란 무엇인가? 그리고 이것들은 왜 중요한가? (1) | 2023.05.17 |
8일차 과제 - 절차지향 / 객체지향 / 함수형 프로그래밍이란 무엇이고 차이점은 무엇인가? (0) | 2023.05.17 |
7일차 과제 - Stack, Queue, Array, Linked List 자료구조와 차이점 (0) | 2023.05.16 |