throw, throws
예제를 보자.
현재 소스
class B{ void run(){ BufferedReader bReader = null; String input = null; try { bReader = new BufferedReader(new FileReader("out.txt")); } catch (FileNotFoundException e) { e.printStackTrace(); } try{ input = bReader.readLine(); } catch (IOException e){ e.printStackTrace(); } System.out.println(input); } } class C{ void run(){ B b = new B(); b.run(); } } public class ThrowExceptionDemo { public static void main(String[] args) { C c = new C(); c.run(); } } | cs |
- 현재 클래스 B의 메소드 run에 try/catch문이 걸려있다.
- 이 부분을 throws를 사용하여 상위메소드에 예외처리를 전가시킬 수 있다.
throws 적용시킨 소스
class B{ // throws 키워드를 사용하여 상위메소드로 예외처리를 전가시키고 있다. void run() throws IOException, FileNotFoundException{ BufferedReader bReader = null; String input = null; bReader = new BufferedReader(new FileReader("out.txt")); input = bReader.readLine(); System.out.println(input); } } class C{ // 클래스 C의 ㅇ메소드 run에 try/catch문을 정의하고 있다. void run(){ B b = new B(); try { b.run(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } public class ThrowExceptionDemo { public static void main(String[] args) { C c = new C(); c.run(); } } | cs |
- throws 키워드를 사용하여 상위메소드로 예외처리를 전가시키고 있음을 알 수 있다.
- 상위클래스인 클래스 C에 try / catch 문이 정의 되어 있음을 알 수 있다.
throws 적용시킨 소스
class B{ // throws 키워드를 사용하여 상위메소드로 예외처리를 전가시키고 있다. void run() throws IOException, FileNotFoundException{ BufferedReader bReader = null; String input = null; bReader = new BufferedReader(new FileReader("out.txt")); input = bReader.readLine(); System.out.println(input); } } class C{ // throws 키워드를 사용하여 상위메소드로 예외처리를 전가시키고 있다. void run() throws IOException, FileNotFoundException{ B b = new B(); b.run(); } } public class ThrowExceptionDemo { public static void main(String[] args) { C c = new C(); try { c.run(); } catch (FileNotFoundException e) { System.out.println("out.txt 파일은 설정 파일 입니다. 이 파일이 프로잭트 루트 디렉토리에 존재해야 합니다."); } catch (IOException e) { e.printStackTrace(); } } } | cs |
- 클래스 B, C를 throws 키워드를 사용하여 상위메소드로 예외를 전가시킨 소스이다.
throw VS throws
- throw : 억지로 현재 메소드 내에서 예외를 강제로 발생시키는 것.
- throws : 현재 메소드에서 자신을 호출한 상위 메소드에서 에러처리에 대한 책임을 맡게 하는 것.(상위메소드로 책임을 전가시킴)