-
[Java] 예외 처리 - 리소스 닫기 & 예외 넘기기(Throw)CSE/Java 2016. 4. 21. 10:55
예외처리는 여러 절로 구성되어 있습니다.
자동 리소스 닫기
자바 7부터 추가된 try-with-resources 를 사용하면 예외 발생 여부와 상관없이 사용했던 리소스 객체(각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널)의 close() 메소드를 호출해서 안전하게 닫아줍니다.
다음은 이전 자바 6에서 사용했던 리소스 객체 닫기 코드입니다.
12345678910111213141516171819FileInputStream fis = null;try {fis = new FileInputStream("file.txt");...} catch (IOException e) {...} finally {if (fis != null) {try {fis.close();} catch (IOException e) {}}}cs finally 블록에서 다시 try-catch 블록으로 fis를 닫아줘야합니다. 다소 복잡한 면이 있습니다.
다음으로는 자바7에서 닫는 방법을 예제로 보겠습니다.
* FileInputStream.java
1234567891011121314151617181920package except;public class FileInputStream implements AutoCloseable {private String file;public FileInputStream(String file) {this.file = file;}public void read() {System.out.println(file + "을 읽습니다.");}public void close() throws Exception {System.out.println(file + "을 닫습니다.");}}cs * TryWithResExam.java
123456789101112131415161718package except;public class TryWithResExam {public static void main(String[] args) {try (FileInputStream fis = new FileInputStream("text.txt")) {fis.read();throw new Exception(); // 강제적으로 예외 발생} catch (Exception e) {System.out.println("예외 처리 코드 실행");}}}cs 위처럼 수행하기 위해서 java.lang.AutoCloseable 인터페이스를 구현한 객체여야 합니다.
예외 떠넘기기
메소드 내부에서 예외가 발생할 수 있는 코드를 작성할 때 try-catch 블록으로 예외를 처리하는 것이 기본이지만, 경우에 따라서는 메서드를 호출한 곳으로 예외를 떠넘길 수 있습니다.
이때 사용하는 키워드는 throws 입니다. throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 합니다. throws 키워드 뒤에는 떠넘길 예외 클래스를 쉼표로 구분해서 나열해주면 됩니다.
1234리턴타입 메소드명(파라미터,...) throws exceptionClass1, exceptionClass2, ... {}cs throws 키워드가 붙어있는 메서드는 반드시 try블록 내에서 호출되어야 합니다. 그리고 catch 블록에서 떠넘겨 받은 예외를 처리해야 합니다.
* ThrowsExam.java
123456789101112131415161718192021package except;public class ThrowsExam {public static void main(String[] args) {try {findClass();} catch (ClassNotFoundException e) {System.out.println("클래스가 존재하지 않습니다");}}public static void findClass() throws ClassNotFoundException {Class clasis = Class.forName("what.the.Heck");}}cs end
* 신용권의 '이것은 자바다'를 참조한 포스팅입니다.
'CSE > Java' 카테고리의 다른 글
[Java] 예외 처리 - 사용자 정의 예외 (0) 2016.04.21 [Java] 예외 처리 - 예외 처리 코드 (0) 2016.04.21 [Java] 예외 처리 - 예외 & 실행 예외 (0) 2016.04.21 [Java] 자바 기본 API - java.time Package (0) 2016.04.19 [Java] 자바 기본 API - Format Class (0) 2016.04.19 [Java] 자바 기본 API - Date, Calendar Class (0) 2016.04.16