티스토리 뷰
생활코딩-java 수업을 듣고 중요 내용을 정리한 것입니다.
- 예외의 강제
package Day20190720;
import java.io.*;
public class ExceptionEx3 {
public static void main(String[] args) {
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);
}
}

FileReader라는 클래스의 Throws 내용은 생성자 FileReader의 인자 fileName의 값에 해당하는 파일이 디렉토리이거나 어떤 이유로 사용할 수 없다면 FileNotFoundException을 발생시킨다는 의미이다.
이것은 FileReader의 생성자가 동작할 때 파일을 열 수 없는 경우가 생길 수 있고, 이런 경우 생성자 FileReader에서는 이 문제를 처리할 수 없기 때문에 이에 대한 처리를 생성자의 사용자에게 위임하겠다는 의미다. 그것을 던진다(throw)로 표현하고 있다. 따라서 API의 사용자 쪽에서는 예외에 대한 처리를 반드시 해야한다는 의미이다.
어떠한 예외는 그것을 반드시 처리하도록 강제하는 형태의 예외가 있고 그렇지 않은 예외도 있다.
- throw와 throws
package Day20190720;
import java.io.*;
class B{
void run() throws FileNotFoundException, IOException{
BufferedReader bReader = null;
String input = null;
bReader = new BufferedReader(new FileReader("out.txt"));
input = bReader.readLine();
System.out.println(input);
}
}
class C{
void run() throws FileNotFoundException, IOException{
B b = new B();
b.run();
}
}
public class ExceptionEx4 {
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();
}
}
}
B.run이 예외 처리를 직접 하지 않고 다음 사용자 C.run에게 넘길 수 있다. B 내부의 try...catch 구문은 제거되었고 run 옆에 FileNotFoundException, IOException이 추가되었다. 이것은 B.run 내부에 FileNotFoundException, IOException에 해당하는 예외가 발생하면 이에 대한 처리를 B.run의 사용자 C.run에게 위임하는 것이다.
다시 main에게 넘길 수 있다.
out.txt 파일을 찾을 수 없는 상황은 B.run 입장에서는 어떻게 할 수 있는 일이 아니다. 엔드유저인 어플리케이션의 사용자가 out.txt 파일을 루트 디렉토리에 위치시켜야 하는 문제이기 때문에 어플리케이션의 진입점인 메소드 main으로 책임을 넘기고 있다.
'Programming Language > Java' 카테고리의 다른 글
| 래퍼(wrapper) 클래스 (0) | 2019.07.23 |
|---|---|
| Object 클래스 (0) | 2019.07.22 |
| 예외처리(Exception Handling) - 만들기 (0) | 2019.07.21 |
| 예외처리(Exception Handling) - 문법 (2) | 2019.07.20 |