안녕하십니까?
정말 기초적인 질문일지 몰라도 하다보니 왜 꼭 try / catch 을 해줘야 하는지가 궁금해서 이렇게 글을 올립니다.
코딩을 하다가 오류라인을 확인해 보면 Add throws declaration 또는 Surround with try / catch 이걸 하라는 내용이 나옵니다.
어떤 경우에 저걸 하는지가 궁금해서 글을 올립니다.
그냥 이전에 이렇게 했으니 이렇게 하자~~~이런씩으로 했었는데~~기본은 알고 가야 될것 같아 질문 드립니다.
답변 부탁드립니다.
예를 들면 FileInputStream로 아래와 같이 인스턴스를 만들면 try...catch를 하라고 나옵니다.
그리고 이클립스가 FileNotFoundException을 catch에서 자동으로 붙여줍니다. FileInputStream은 파라메터로 받은 파일명또는 경로에 있는 파일을 읽기 위한 클래스입니다. 따라서 생성할 때 지정된 파일이 없으면 인스턴스 자체 생성이 실패하게 됩니다. 만약 저기서 try..catch를 안걸어주면 발생한 Exception은 결국 JVM에게 전달되고 프로그램은 비정상 종료하게 됩니다. 반대로 catch에서 Exception에 대비한 코드, 파일을 찾을 수 없다는 메시지를 뿌려주거나 파일이 없으니깐 안전하게 종료하는 로직을 처리해 줄 수 있습니다.
이런 처리를 물론 개발자가 try..catch 안 걸고 직접 하셔도 됩니다. 생성하기 전에 먼저 파일이 있는지 체크하고 다 해도 됩니다만
FileInputStream 생성자 정의에 보면
보시다시피 생성자 정의에 throws FileNotFoundException 이렇게 붙어 있습니다. 생성자를 호출하는 코드를 작성하면 무조건 FileNotFoundException에 대한 처리를 하라는 Java Api쪽의 권고라고 보시면 됩니다.