안녕하세요.
이번 포스팅은 저번 포스팅에 이어서
예외처리를 다뤄볼 예정입니다.
이번 포스팅은 Try Catch에서 다중 Catch와 멀티 Catch에 대해 알아보겠습니다.
말 그대로 Catch문을 여러 개 작성하는 것을 의미하며
이 경우 유의해야 하는 경우가 있습니다.
상위 예외 클래스가 하위 예외 클래스보다 아래에 위치해야 하는데
이 전 포스팅에서 다뤘던 예외 계층 구도
여기서 ArithmeticException이 발생했다면
try {
....
} catch(AtithmeticException e) {
....
} catch(Exception e) {
....
}
이렇게 상위 예외 클래스인 Exception이 아래에 위치하도록 작성해 줘야 합니다.
바로 예제로 알아보도록 하겠습니다.
이 경우를 보게 되면 두 가지의 예외가 발생할 수 있는 경우입니다.
하나는 0으로 나머지 값을 나눴을 경우
다른 하나는 문자열을 입력해서 연산을 할 경우입니다.
전 포스팅에서 다뤘던 내용을 토대로 작성하였습니다.
이때 두 가지의 예외처리를 해줘야 하는데
Exception 만으로는 한 가지의 예외 처리만 가능하기 때문에
이럴 때 다중 Catch 또는 멀티 Catch를 사용하게 됩니다.
우서 다중 Catch를 통해서 예외처리를 진행해 보도록 하겠습니다.
이렇게 각 발생할 예외를 catch문에 작성하여 주면
해당 예외가 발생했을 때 그 Catch만 발생하여
해당 예외 처리를 진행해 줄 수 있습니다.
우선 0으로 나눴을 때 발생하는 ArithmeticException 결과를 보도록 하겠습니다.
이렇게 ArithmeticException 에러가 발생하여 예외처리가 진행된 것을 볼 수 있습니다.
하지만 여기서 문제는 같은 try문에 들어있는 다른 결과는 무시하고 Catch문이 실행되어
예외처리 후 try문을 벗어나서 다음 줄에 있는 출력문이 실행된 것을 볼 수 있습니다.
다음 NumberFormatException의 경우도 보도록 하겠습니다.
이 경우에는 첫 ArithmeticException이 발생하지 않았기 때문에
a / c는 진행했지만 다음 NumberFormatException이 발생하여
Catch문이 실행된 것을 볼 수 있습니다.
이렇게 첫 try문에서 예외가 발생했을 경우에는 그다음까지 실행이 되지 않고
바로 예외처리 후 예외처리문을 빠져나가는 경우가 생기게 됩니다.
그렇기에 프로그램 로직 구성 시 예외가 발생할 부분을
체크하고 그 부분만을 예외처리해 주는 것을 추천하며
한 가지 처리에서 두 가지 예외가 발생하는 경우 이렇게 다중 Catch 및 멀티 Catch를 사용하는 것이
올바른 사용법입니다.
지금 로직은 두가지 처리에서 두가지 예외가 발생한 경우이기 때문에
이 경우에는 각각 예외처리문을 써주는 게 올바른 방법이 됩니다.
이번에는 멀티 Catch에 대해 알아보겠습니다.
다중 Catch와의 다른 점은 한 Catch문에 여러 개의 예외클래스를 넣고
그 후 마지막에 상위 예외 클래스를 써주는 방법입니다.
앞서 진행했던 예제를 바탕으로 작성해 보도록 하겠습니다.
이렇게 다중 Catch와는 비슷하지만
두 가지 예외 클래스를
| 기준으로 묶어 놓은걸 볼 수 있습니다.
이렇게 사용하게 되면 여러 개를 한 Catch문 안에서 사용할 수 있고
그 외의 예외를 상위 예외 클래스에서 처리할 수 있습니다.
간단하게 멀티 Catch와 다중 Catch에 대해 알아보았습니다.
더 궁금하시거나 이해가 안 되시는 부분은
댓글을 통해 남겨주시면
빠른 답변드리도록 하겠습니다.
다음 포스팅은 Try With Resoirces
AutoClose에 대해 포스팅하도록 하겠습니다.
감사합니다

'개발언어 > JAVA' 카테고리의 다른 글
Java 개발을 위한 예외전가(Exception Throws) (0) | 2023.09.17 |
---|---|
Java 개발을 위한 Exception AutoClose(try-with-resources) (0) | 2023.09.17 |
Java 개발을 위한 TryCatch 예외처리(Exception Handling) (0) | 2023.09.17 |
Java 개발을 위한 다중상속과 다중구현 (2) | 2023.09.03 |
Java 개발을 위한 익명객체(AnonymousObject) (0) | 2023.09.03 |