반응형
이번 글에서는 예외를 직접 처리하지 않고 호출한 곳으로 전달하는 방법인 throws 키워드를 배워봅니다.
또한 main() 메서드에 throws Exception을 붙이면 어떤 효과가 있는지도 함께 살펴봅니다.
📌 예제 코드
public class ThrowsExample {
public static void main(String[] args) {
try {
findClass("java.lang.String2"); // 존재하지 않는 클래스명
} catch (Exception e) {
System.out.println("예외 처리 : " + e.toString());
}
}
// ClassNotFoundException 예외를 직접 처리하지 않고 호출한 곳으로 던짐
public static void findClass(String str) throws ClassNotFoundException {
Class.forName(str);
}
}
💻 실행 결과
예외 처리 : java.lang.ClassNotFoundException: java.lang.String2
💬 코드 설명
- findClass() 메서드에서 Class.forName()을 호출하며, 이 과정에서 클래스를 찾을 수 없는 경우 ClassNotFoundException이 발생합니다.
- 해당 예외는 메서드 내부에서 try-catch로 처리하지 않고, throws ClassNotFoundException을 통해 호출한 쪽으로 예외를 넘깁니다.
- main() 메서드에서는 try-catch를 사용해 예외를 받아 처리하고, 예외 정보를 출력합니다.
⚠️ main()에 throws Exception을 붙이면?
public static void main(String[] args) throws Exception {
findClass("java.lang.String2");
}
이렇게 작성하면 main()에서도 예외를 처리하지 않고 JVM에게 직접 예외를 넘깁니다.
결과적으로 예외 메시지는 콘솔에 그대로 출력되지만, 명시적인 예외 처리 없이 프로그램이 종료됩니다.
실행 결과 예시:
Exception in thread "main" java.lang.ClassNotFoundException: java.lang.String2
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
at ch11.sec03.exam01.ThrowsExample.findClass(ThrowsExample.java:13)
at ch11.sec03.exam01.ThrowsExample.main(ThrowsExample.java:6)
✔️ 즉, throws Exception을 main()에 붙이면 예외가 발생했을 때 프로그램이 중단되며 개발자용 오류 메시지가 그대로 출력됩니다.
이는 테스트나 간단한 실습에서는 편리하지만, 실제 서비스 코드에서는 사용자 친화적인 처리를 위해 try-catch로 감싸는 것이 일반적입니다.
💡 포인트 정리
- throws는 예외 처리를 자신이 하지 않고 호출한 쪽에 떠넘기는 키워드입니다.
- 예외를 위임하면 호출한 메서드에서 반드시 예외를 처리하거나, 다시 throws로 넘겨야 합니다.
- main()에 throws Exception을 붙이면 예외 발생 시 JVM이 예외를 콘솔에 출력하고 프로그램을 종료합니다.
- 사용자에게 친절한 메시지를 제공하고 싶다면 try-catch를 활용해 예외를 직접 처리해야 합니다.
📌 정리하자면, throws는 예외를 직접 처리하지 않고 다음 호출 지점으로 넘기는 방법입니다.
예외가 전달된 메서드에서는 try-catch로 받아서 처리하거나, 다시 throws로 넘겨야 하며,
main()에서 처리하지 않으면 JVM이 예외 메시지를 출력하고 프로그램이 종료됩니다.
'Java > 자바 정리' 카테고리의 다른 글
101. hashCode()와 equals()는 짝꿍이다 – 동등 객체 비교의 원칙 (0) | 2025.05.13 |
---|---|
100. 객체 비교의 기준을 내 마음대로! – equals() 메서드 재정의 (0) | 2025.05.13 |
99. 예외를 직접 던져보자 – 잔고 부족 예외 처리 만들기 (0) | 2025.05.13 |
97. 예외가 여러 개여도 하나로 처리하자 – 멀티 캐치(Multi-Catch) (0) | 2025.05.13 |
96. 예외 처리에도 순서가 있다! – Exception은 맨 마지막에 써야 해요 (0) | 2025.05.13 |
95. 배열 범위도, 숫자 형식도 조심하자 – 예외 두 개를 잡는 try-catch (0) | 2025.05.13 |