작성
·
60
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
여기에 질문 내용을 남겨주세요.
자바 중급1을 모두 학습하고 다시 보면서 복습을 하고 있던 도중 이해가 가지 않는 부분이 있어 질문 드립니다.
섹션5 Class클래스강의 (13:26)에 나오는 ClassCreateMain 클래스에 대해 질문 드리려고 합니다.
main부분에서 throws Exception을 해야 오류가 않나는 것을 확인했습니다. 예외파트 강의에서 main에서도 예외를 던져버리면 에러가 난다고 이해했었는데 main에서도 예외를 던졌는데 이 예외는 어떻게 리되는 건가요?
답변 2
0
안녕하세요. 안정현님, 공식 서포터즈 y2gcoder입니다.
아마도 ClassCreateMain
의 main
메서드에서 throws Exception
을 해주지 않으면 컴파일 에러가 발생할 것입니다 🙂
package lang.clazz;
public class ClassCreateMain {
public static void main(String[] args) {
//Class helloClass = Hello.class;
Class<?> helloClass = Class.forName("lang.clazz.Hello"); //ClassNotFoundException
Hello hello = (Hello) helloClass.getDeclaredConstructor().newInstance(); //NoSuchMethodException
String result = hello.hello();
System.out.println("result = " + result);
}
}
컴파일 에러가 나는 부분에 커서를 올려보시면 아마도 Class.forName()
과 helloClass.getDeclaredConstructor()
에서 각각 ClassNotFoundException
과 NoSuchMethodException
에 대한 처리를 요구하는 것을 발견하실 수 있습니다.
이 둘은 모두 CheckedException
으로 본 강의의 예외 처리 챕터에서 학습하셨던 것과 같이 throws
를 통해 밖으로 던져주거나, try-catch
문 을 이용해 해당 로직 내에서 처리해주어야 합니다. 해당 시점에서는 학습에 집중하기 위해 예외를 각각 잡아서 처리해주지 않고 throws Exception
을 통해 모든 예외를 던져주는 방향으로 구현했습니다!
만약 main
메서드에서 이렇게 throws Exception
을 던지게 구현했는데, main
메서드에서 예외가 발생했을 때 처리가 궁금하시다면 아래의 AI 인턴의 답변을 참고해주십쇼!
감사합니다.
메서드 시그니처 옆 throws Exception 이라는 것은 Exception (및 상속하는 모든 예외)가 메서드 내에서 발생했을 때 이를 밖으로 던져주라는 의미입니다.
실제로 예외가 발생했을 때는 AI 답변 처럼 작동하지만, 예외가 발생하지 않은 정상 동작이라면 정상 작동하는 것이 맞습니다 🙂
예외 처리 부분을 다시 복습해보시면 이해가 가실 거라 생각합니다!
Class.forName()
과 helloClass.getDeclaredConstructor()
에서 각각 ClassNotFoundException
과 NoSuchMethodException
이 났다는 이유는 예외가 발생했기 때문이고 이 예외를 처리해주기 위해서 throws Exception을 해준 것이므로 예외가 발생한 비정상 작동이라고 봐야하는 거라고 생각되어 잘 이해가 가지 않습니다
답변 감사합니다!
Class.forName()
과helloClass.getDeclaredConstructor()
에서 각각ClassNotFoundException
과NoSuchMethodException
이 났다는 이유는 예외가 발생했기 때문이고
=> 컴파일 오류가 발생한 것은 실제로 예외가 발생했기 때문에 컴파일 오류가 발생한 것이 아닙니다. 체크 예외를 던지는 메서드들이기 때문에 throws
로 던지든, try-catch
문을 사용하든 자바 문법 상 체크예외 발생했을 때의 처리를 꼭 해줘야 하기 때문에 컴파일 에러가 발생하는 것입니다 🙂
체크 예외가 실제로 발생할 지는 지금 알 수 없습니다 🙂 항상 예외가 발생하는 메서드라면 잘못된 메서드입니다!
0
안녕하세요, 인프런 AI 인턴입니다. 안정현님.
자바의 예외 처리와 관련된 부분에 대해 질문해주셨군요. 예외 처리에서 main 메서드에서 예외를 던지는 상황에 대한 이해를 돕기 위해 참고할 수 있는 유사한 질문과 답변을 제공해드립니다.
먼저, 연관된 질문들을 참고하시기 바랍니다:
throws Exception
의 기본 개념과 예외 처리 방식에 대해 다룹니다.기본적으로 main
메서드에서 throws Exception
을 사용하게 되면, 해당 예외는 JVM에 의해 처리됩니다. 이때 JVM은 예외 스택 트레이스를 출력하고 프로그램을 종료하는데 이러한 동작 때문에 예외 처리를 하지 않았을 때와 유사하게 프로그램이 종료됩니다. 그러나, throws Exception
을 사용하게 되면 코드 내에서 의도적으로 예외를 던진다는 명확한 표시를 남길 수 있습니다.
참조하신 강의와 관련된 질문도 있어 이를 함께 공유합니다:
throws
를 사용하고 언제 직접 catch
해서 처리해야 하는지에 대한 내용입니다.위의 링크들을 참고하시고 추가로 궁금한 점이 있으시면 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
main에서 조차도 예외를 던져버리게 되면 AI답변에 의하면 JVM에서 스택 트레이스를 출력해주고 처리해준다고 되어있는데, 막상 던졌는데 정상 작동이 되는게 잘 이해가 되지 않습니다.
답변 감사합니다!