일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 새벽공부
- 예외 처리
- 초보개발자
- 개발자
- 문자 단위 스트림
- 다형성
- 코린이
- exception
- 보조 스트림
- 인스턴스
- 바이트 단위 스트림
- 배열
- SSR
- Java
- 변수
- FileInputStream
- 인터페이스
- throws
- ArrayList
- 졸리다
- 백엔드
- 코딩
- MPA
- try-catch
- node.js
- 자바
- 메서드
- 자료형
- 파이팅
- 상속
- Today
- Total
SHUSTORY
14-3 예외 처리 미루기 본문
예외 처리를 미루는 throws 사용하기

FileInputStream을 생성했을 때 예외 처리 방법에는 두 가지가 있었다.
14-2에서는 Surround with try/catch에 대해 알아보았고,
이제 Add throws declaration에 대해 살펴보자.
예외를 해당 메서드에서 처리하지 않고 미룬 후 메서드를 호출하여 사용하는 부분에서 예외를 처리하는 방법이다.

loadClass( ) 메서드는 FileInputStream을 열고 Class를 동적으로 로딩하여 반환한다.
파일을 열 때는 FileNotFoundException이 발생할 수 있고,
클래스를 로딩할 때는 ClassNotFoundException이 발생할 수 있다.
throws를 통해 두 예외를 메서드가 호출될 때 처리하도록 미루었다.
예외를 처리하지 않고 미룬다고 선언하면, 그 메서드를 호출하여 사용하는 부분에서 예외를 처리해야 한다.

다음 세 가지 옵션 중 하나를 선택하여 오류를 처리할 수 있다.
- Add throws declaration
- main( ) 함수 선언 부분에 throws FileNotFoundException, ClassNotFoundException을 추가하고 예외 처리를 미룬다는 의미
- main( ) 함수에서 미룬 예외 처리는 main( ) 함수를 호출하는 JVM으로 보내지므로 예외를 처리하는 것이 아니라 대부분의 프로그램이 비정상 종료되기 때문에 다른 두 옵션 중 하나를 사용하는 것이 좋다.
- Surround with try/multi-catch
- 하나의 catch문에서 여러 예외를 한 문장으로 처리하겠다는 의미이다.
- 이 옵션을 클릭하면 아래와 같이 코드가 생성된다.

- Surround with try/catch
- 예외 수만큼 catch문이 생성된다.
- 각 예외 상황마다 다른 방식으로 처리해야 하고 로그도 다르게 남겨야 하는 경우 이 옵션을 사용한다.
- 이 옵션을 클릭하면 아래와 같이 코드가 생성된다.

만약 어떤 메서드가 다른 여러 코드에서 호출되어 사용된다면
호출하는 코드의 상황에 맞게 로그를 남기거나 예외 처리를 하는 것이 더 좋다.
따라서 이런 경우 메서드를 호출하는 부분에서 예외 처리를 하도록 미루는 것이 합리적이다.
다중 예외 처리
여러 catch문을 한꺼번에 사용하는 경우에는 각 catch 블록은 각각의 예외 처리를 담당한다.
그런데 문법적으로 반드시 예외 처리를 해야 하는 경우 이외에도 예외 처리를 해야 할 때가 있다.
예를 들어 배열을 사용할 때 배열의 크기보다 큰 위치, 즉 요소가 존재하지 않는 위치로 접근하는 경우에 RuntimeException 중 ArrayIndexOutOfBoundsException이 발생한다.
이 예외는 컴파일러에 의해 체크되지 않는다.
이렇게 어떤 예외가 발생할지 미리 알 수 없지만 모든 예외 상황을 처리하고자 한다면 맨 마지막 부분에 Exception 클래스를 활용하여 catch 블록을 추가한다.

24행에서 Exception 클래스를 사용하였다.
Exception 클래스는 모든 예외 클래스의 최상위 클래스로, Exception 클래스를 기본 예외 처리라고도 한다.
따라서 다른 catch 블록에 선언한 것 이외의 예외가 발생하더라도 Exception 클래스로 자동 형 변환된다.
다중 예외 처리에서 주의 사항
예외는 catch문을 선언한 순서대로 검사한다.
따라서 맨 위에 catch(Exception e) 문장을 작성하면 발생하는 모든 예외 클래스는 Exception 상위 클래스로
자동 형 변환되어 오류가 발생한다.

Exception 클래스의 아래에 있는 클래스에서 오류가 발생한 것을 확인할 수 있다.
기본 예외를 처리하는 Exception 클래스에 의해 모든 예외가 처리되므로 ClassNotFoundException이나 FileNotFoundException 문장에는 예외가 도달할 일이 없어 컴파일 오류가 발생한다.
따라서 기본 예외 처리를 하는 Exception 클래스 블록은 여러 예외 처리 블록의 가장 아래에 놓여야 한다.
'프로그래밍 > JAVA' 카테고리의 다른 글
15-1 자바 입출력과 스트림 (0) | 2023.03.21 |
---|---|
14-4 사용자 정의 예외 (0) | 2023.03.17 |
14-2 예외 처리하기 (0) | 2023.03.16 |
14-1 예외 클래스 (0) | 2023.03.16 |
13-2 람다식 (0) | 2023.03.14 |