티스토리 뷰
주의 사항!
- 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
- 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
- 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.
메서드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try - catch 블록으로 예외를 처리하는 것이 기본이지만, 경우에 따라서는 메서드를 호출한 곳으로 예외를 떠넘길 수도 있습니다. 이때 사용하는 키워드가 throws입니다. throws 키워드는 메서드 선언부 끝에 작성되어 메서드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 합니다. throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열해주면 됩니다.
리턴타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... { ... }
발생할 수 있는 예외의 종류별로 throws 뒤에 나열하는 것이 일반적이지만, 다음과 같이 throws Exception만으로 모든 예외를 간단히 떠넘길 수도 있습니다.
리턴타입 메서드명(매개변수, ...) throws Exception { ... }
throws 키워드가 붙어 있는 메서드는 반드시 try 블록 내에서 호출되어야 합니다. 그리고 catch 블록에서 떠넘겨 받은 예외를 처리해야 합니다. 다음 코드는 throws 키워드가 있는 method2()를 method1()에서 호출하는 방법을 보여줍니다.
public void method1() {
try {
method2();
} catch(ClassNotFoundException e) {
//예외 처리 코드
System.out.println("클래스가 존재하지 않습니다.");
}
}
public void method2() throws ClassNotFoundException {
Class clazz = Class.forName("java.lang.String2");
}
method1()에서도 try - catch 블록으로 예외를 처리하지 않고 throws 키워드로 다시 예외를 떠넘길 수 있습니다. 그러면 method1()을 호출하는 곳에서 결국 try - catch 블록을 사용해서 예외를 처리해야 합니다.
public void method1() throws ClassNotFoundException {
method2();
}
public void method2() throws ClassNotFoundException {
Class clazz = Class.forName("java.lang.String2");
}
Class.forName() 메서드 선언부에도 뒤에 throws ClassNotFoundException이 붙어 있기 때문에 forName() 메서드를 호출할 때 try - catch 블록으로 예외를 처리하거나, throws로 예외를 떠넘겨야 합니다.
main() 메서드에서도 throws 키워드를 사용해서 예외를 떠넘길 수 있는데, 결국 JVM이 최종적으로 예외 처리를 하게 됩니다. JVM은 예외의 내용을 콘솔(Console)에 출력하는 것으로 예외 처리를 합니다. 하지만 main() 메서드에서 JVM으로 예외를 던지는 것은 좋지 못한 예외 처리 방법입니다. 프로그램 사용자는 프로그램이 알 수 없는 예외 내용을 출력하고 종료되는 것을 좋아하지 않습니다. 그렇기 때문에 main() 메서드에서 try - catch 블록으로 예외를 최종 처리하는 것이 바람직합니다.
'공부 일지 > JAVA 공부 일지' 카테고리의 다른 글
자바, 예외 정보 얻기 (0) | 2021.04.13 |
---|---|
자바, 사용자 정의 예외와 예외 발생 (0) | 2021.04.13 |
자바, 자동 리소스 닫기 (0) | 2021.04.13 |
자바, 예외 처리 코드 (0) | 2021.04.13 |
자바, 예외와 예외 클래스 (0) | 2021.04.13 |