메서드에 예외 선언하기

mingseok·2022년 5월 15일
0

예외처리

목록 보기
6/7

메서드의 선언부에 키워트 throws를 사용해서 메서드 내에서 발생할 수 있는 예외를 적어주기만 하면 된다.


그리고, 예외가 여러 개일 경우에는 쉼표(,)로 구분한다.

void method() throws Exception1, Exception2, Exception3 {
	// 메서드의 내용
}


예외의 최고조상인 Exception클래스를 메서드에 선언하면, 이 메서드는 모든 종류의 예외가 발생할 가능성이 있다는 뜻이다.

void method() throws Exception {
	// 메서드의 내용
}


오버라이딩할 때는 단순히 선언된 예외의 개수가 아니라 상속관계까지 고려해야 한다.

class ExceptionEx12 {
	public static void main(String[] args) throws Exception {
		method1(); // 같은 클래스내의 static멤버이므로 객체생성없이 직접 호출가능.
  	}	// main메서드의 끝

	static void method1() throws Exception {
		method2();
	}	// method1의 끝

	static void method2() throws Exception {
		throw new Exception();
	}	// method2의 끝
}

출력값
Exception in thread "main" java.lang.Exception
        at aaa.method2(aaa.java:11)
        at aaa.method1(aaa.java:7)
        at aaa.main(aaa.java:3)

1. 예외가 발생했을 때, 모두 3개의 메서드(main, method1, method2)가 호출스택에 있었으며,

2. 예외가 발생한 곳은 제일 윗줄에 있는 method2()라는 것과

3. main메서드가 method1()을, 그리고 method1()은 method2()를 호출했다는 것을 알 수 있다.


try-catch문으로 예외처리를 해주지 않았으므로, method2()는 종료되면서 예외를 자신을 호출한
method1()에게 넘겨준다.

method1()에서도 역시 예외처리를 해주지 않았으므로 종료되면서 main메서드에게 예외를 넘겨준다

그러나 main메서드에서 조차 예외처리를 해주지 않았으므로 main메서드가 종료되어 프로그램이
예외로 인해 비정상적으로 종료되는 것이다.


이처럼 예외가 발생한 메서드에서 예외처리를 하지 않고 자신을 호출한 메서드에게 예외를 넘겨줄 수는 있지만, 이것으로 예외가 처리된 것은 아니고 예외를 단순히 전달만 하는 것이다.
결국 어느 한 곳에서는 반드시 try-catch문으로 예외처리를 해주어야 한다.


Reference
남궁 성 지음, 『자바의 정석』, 도우출판.

profile
블로그 이사 했습니다.

0개의 댓글