try-catch문 단순화 하는 과정에서 질문입니다.

조회수 541회

try { FileReader fin = new FileReader("c:\test.txt");

..
int c = fin.read();
..

fin.close();

}

catch(FileNotFoundException e) { System.out.println("파일을 열 수 없음"); }

catch(IOException e) { System.out.println("입출력 오류"); }

대략 이런 코드가 있을 때 try-catch문을 단순화 하기 위해서 FileNotFoundException 구문을 생략해도 된다고 했습니다. FileNotFoundException이 IOException을 상속받기 때문에요.

근데 FileNotFoundException 가 서브클래스니깐 IOException보다 더 많은 속성과 기능을 가지고 있잖아요. 그래서 IOException구문을 생략하는게 맞다고 생각하는데 왜 그렇지 않은거죠?

  • try 에 묶인 메소드중에 IOException 을 throw 하는 메소드가 있겠죠...자바는 명시적으로 예외처리를 해야 합니다. 정영훈 2019.5.27 16:07
  • 위에 정영훈님이 말씀하신 상황이 맞고요, FileNotFoundException만 남겨서 상세화된 예외만 잡게되면 다른 IOException을 잡을 수 없습니다. I/O 상황에서의 예외는 파일을 발견하지 못하는 예외만 존재하는게 아니니까요. 특별히 파일을 찾지 못했을때만 다른 예외처리를 할 것이 아니라면 로직을 묶어서 같은 방식으로 처리하는게 보다 심플하겠죠. doodoji 2019.5.27 20:37
  • 질문자는 잘 알고 있습니다. 자바 예외부분은 적고 싶은 글이 많지만...이펙티브 자바 서적을 추천합니다. 꼭 읽어보세요. 그리고 상기의 문제는 설계관점이기 때문에...상황에 따라 다를 수 밖에 없습니다. 간단한 경우 혹은 예외가 중요치 않다 할 때는 Exception 하나로 선언 하기도 합니다. 정영훈 2019.5.27 21:34

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)